La siguiente expresión grep enumera correctamente todos los archivos .exe y .html en el directorio y subdirectorios actuales.
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
¿Cómo invierto este resultado para enumerar aquellos que no son .html o .exe en su lugar? (Es decir,. !=)

-v/--invert-matchno necesariamente cambiará si el código de retorno degrepindica 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.o
También puede hacer lo mismo usando
find:Más información aquí .
fuente
findcomando es la solución más semántica a este problema XY. Combinarlsygreppara este propósito parece hacky en el mejor de los casos. Esta debería ser la respuesta aceptada. (+1)Agregue la
-vopción a sugrepcomando para invertir los resultados.fuente
fuente
Como se indicó varias veces, la inversión se logra mediante la
-vopción degrep. Permítame agregar la nota (con suerte divertida) de que podría haberlo descubierto usted mismo al leer elgreptexto de ayuda:fuente