¿Estás seguro de que lo que quieres está sucediendo? Cuando corres ls /directory | grep '[^term]'
, esencialmente estás buscando no las letras ter m. Esto significa que si un archivo tiene otras letras en su nombre, seguirá apareciendo en la salida de ls
. Tome el siguiente directorio por ejemplo:
$ ls
alpha brave bravo charlie delta
Ahora si corro ls |grep '^[brav]'
me sale lo siguiente:
$ ls |grep '^[brav]'
alpha
brave
bravo
Como puede ver, no solo obtuve brave
y bravo
también obtuve alpha
porque la clase de caracteres []
obtendrá cualquier letra de esa lista.
En consecuencia, si ejecuto ls |grep '[^brav]'
obtendré todos los archivos que no contienen los caracteres brav en ningún lugar del nombre.
$ ls |grep '[^brav]'
alpha
bravo
brave
charlie
delta
Si observa que incluía la lista completa del directorio porque todos los archivos tenían al menos una letra que no estaba incluida en la clase de caracteres.
Entonces, como Kanvuanza dijo, para buscar el inverso del "término" en lugar de los caracteres t e r m
que debes usar grep -v
.
Por ejemplo:
$ ls |grep -v 'brav'
alpha
charlie
delta
Además, si no desea utilizar los archivos que tienen caracteres en la clase grep -v '[term]'
. Eso evitará que aparezcan archivos que tengan alguno de esos caracteres. (Respuesta de Kanvuanza)
Por ejemplo:
$ ls |grep -v '[brav]'
Como puede ver, no había archivos listados porque todos los archivos en este directorio incluían al menos una letra de esa clase.
Apéndice:
Quería agregar que usando PCRE es posible usar solo regex para filtrar usando expresiones de negación. Para ello se usaría algo conocido como un negativo de expresiones regulares de preanálisis: (?!<regex>)
.
Entonces, usando el ejemplo anterior, puede hacer algo como esto para obtener los resultados que desea sin usar grep
banderas.
$ ls | grep -P '^(?!brav)'
alpha
charlie
delta
Para deconstruir esa expresión regular, primero coincide en el inicio de una línea ^
y luego busca cadenas que no coincidan brav
para seguir después. Solo alpha
, charlie
y delta
coinciden para que sean los únicos que se imprimen.
grep
líneas que comienzan con el término. ¿O quieres buscar líneas que no contengan término?