2010-12-07 27 views
145

La siguiente expresión grep enumera con éxito todos los archivos .exe y .html en el directorio actual y subdirectorios.Cómo invertir una expresión grep

ls -R |grep -E .*[\.exe]$\|.*[\.html]$ 

Cómo invertir este resultado para mostrar los que no son .html o .exe en su lugar. (Es decir, !=.)

Respuesta

219

Utilice la opción de línea de comandos -v o --invert-match,

ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$ 
58
grep -v 

o

grep --invert-match 

También se puede hacer lo mismo usando find:

find . -type f \(-iname "*" ! -iname ".exe" ! -iname ".html"\) 

Más información here.

+2

El comando 'find' es la solución más semántica para 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) – Eric

+2

@Eric Independientemente de los requisitos de OP, invertir una expresión grep es útil para mucho más que buscar archivos. Dudo que esa sea la razón por la que la mayoría de la gente viene aquí. – byxor

24

Agregue la opción -v a su comando grep para invertir los resultados.

4
grep "subscription" | grep -v "spec"