linux examples ¿Cómo uso grep para buscar en el directorio actual todos los archivos que tienen una cadena "hola" pero que solo muestran archivos.h y.cc?




ls grep (6)

¿Cómo uso grep para buscar en el directorio actual todos y cada uno de los archivos que contengan la cadena "hello" y que muestren solo archivos .h y .cc?


Si leo su pregunta cuidadosamente, solicita "grep para buscar en el directorio actual todos y cada uno de los archivos que contengan la cadena" hello "y mostrar solo los archivos .h y .cc". Para cumplir con sus requisitos precisos aquí está mi presentación:

Esto visualiza los nombres de archivo:

grep -lR hello * | egrep '(cc|h)$'

... y esto muestra los nombres y contenidos de los archivos:

grep hello `grep -lR hello * | egrep '(cc|h)$'`

Puede pasar comodines en lugar de especificar nombres de archivos o usar stdin.

grep hello *.h *.cc

grep -l hello **/*.{h,cc}

Es posible que desee shopt -s nullglob para evitar mensajes de error si no hay archivos .h o no .cc.


find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello" find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello" .

Consulte las páginas del manual para find y xargs para más detalles.


grep -r --include=*.{cc,h} "hello" .

Esto dice: buscar recursivamente (en todos los subdirectorios también) para todos los archivos .cc OR .h que contengan "hello" en este . (directorio actual

De otra pregunta de


Si necesita una búsqueda recursiva, tiene una variedad de opciones. Deberías considerar ack .

En su defecto, si tiene GNU find y xargs :

find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null

El uso de /dev/null garantiza la impresión de los nombres de los archivos; el -print0 y -0 trata de nombres de archivos que contienen espacios (líneas nuevas, etc.).

Si no tiene nombres turbulentos (con espacios, etc.), puede usar:

find . -name '*.*[ch]' -print | xargs grep hello /dev/null

Esto podría recoger algunos nombres que no pretendía, porque la coincidencia de patrón es más difusa (pero más simple), pero de lo contrario funciona. Y funciona con versiones que no son de GNU de find y xargs .





grep