Respuestas:
Use la opción de línea de comandos -v
o --invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
o
grep --invert-match
También puede hacer lo mismo usando find
:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
Más información aquí .
find
comando es la solución más semántica a este problema XY. Combinar ls
y grep
para este propósito parece hacky en el mejor de los casos. Esta debería ser la respuesta aceptada. (+1)
Agregue la -v
opción a su grep
comando para invertir los resultados.
grep "subscription" | grep -v "spec"
Como se indicó varias veces, la inversión se logra mediante la -v
opción de grep
. Permítame agregar la nota (con suerte divertida) de que podría haberlo descubierto usted mismo al leer el grep
texto de ayuda:
grep --help | grep invert
-v, --invert-match selecciona líneas no coincidentes
-v
/--invert-match
no necesariamente cambiará si el código de retorno degrep
indica ejecución exitosa, sino que coincidirá con las líneas que de otro modo no serían coincidentes. Aquellos que buscan invertir el código de retorno (es decir, tener éxito si todas las líneas no coinciden con el patrón, en lugar de al menos uno) deben usar! grep
. Este encuentra uso en expresiones condicionales, por ejemplo:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.