¿Cómo uso grep para buscar en el directorio actual todos y cada uno de los archivos que contienen la cadena "hola" y mostrar solo archivos .h y .cc?
¿Cómo uso grep para buscar en el directorio actual todos y cada uno de los archivos que contienen la cadena "hola" y mostrar solo archivos .h y .cc?
Respuestas:
grep -r --include=*.{cc,h} "hello" .
Esto dice: busque de forma recursiva (en todos los subdirectorios también) todos los archivos .cc OR .h que contengan "hola" en este .directorio (actual)
Puede pasar comodines en lugar de especificar nombres de archivo o usar stdin.
grep hello *.h *.cc
-Rno funciona desafortunadamente. Expande el *antes de ir recursivamente.
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello".
Compruebe las páginas de manual de findy xargspara obtener más detalles.
-print0después, '*.cc'ya que de lo contrario no tiene una acción para esa parte de la búsqueda. O usted tiene que insertar paréntesis ahí: find . \( -name '*.cc' -or -name '*.h' \) -print0.
find -exec +sintaxis en lugar de
-exec grep "hello" {} +donde el par de llaves representa los nombres de archivo. Buena sugerencia.
Si necesita una búsqueda recursiva, tiene una variedad de opciones. Deberías considerarack .
De lo contrario, si tiene GNU findy xargs:
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
El uso de /dev/nullgarantiza que se impriman los nombres de los archivos; el -print0y-0 ofertas con nombres de archivo que contienen espacios (saltos de línea, etc.).
Si no tiene nombres molestos (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 patrones es más difusa (pero más simple), pero de lo contrario funciona. Y funciona con versiones no GNU de findy xargs.
find ... -exec grep "hello" {} +
Si leo su pregunta detenidamente, me pide "grep para buscar en el directorio actual todos y cada uno de los archivos contienen la cadena" hola "y mostrar solo archivos .h y .cc". Así que para cumplir con sus requisitos precisos aquí está mi presentación:
Esto muestra los nombres de archivo:
grep -lR hello * | egrep '(cc|h)$'
... y esto muestra los nombres y el contenido del archivo:
grep hello `grep -lR hello * | egrep '(cc|h)$'`
grep -l hello **/*.{h,cc}
Es posible que desee shopt -s nullglobevitar mensajes de error si no hay archivos .h o no .cc.
La forma más simple: grep -Ril "Tu texto" /
grep -si "hello" --include=*.{cc,h} ./* ./.*(también busca archivos ocultos). Aquí hay una versión genérica para buscar una cadena en todos los archivos ocultos /:grep -s "hello" * .*. Tal vez lo más útil en general (y lo más simple), esto busca "hola" en todos los archivos no ocultos:grep -si "hello" ./*Gracias a esta publicación: askubuntu.com/a/777456