¿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
-R
no 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 find
y xargs
para obtener más detalles.
-print0
despué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 find
y xargs
:
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
El uso de /dev/null
garantiza que se impriman los nombres de los archivos; el -print0
y-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 find
y 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 nullglob
evitar 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