¿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?
138
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)
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/777456grep -r --include=*.{java,py} "hello" .
Puede pasar comodines en lugar de especificar nombres de archivo o usar stdin.
fuente
-R
no funciona desafortunadamente. Expande el*
antes de ir recursivamente.$ grep -R hello *
# buscar de toda la palabra contiene hola (incluido el subdirectorio)find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
.Compruebe las páginas de manual de
find
yxargs
para obtener más detalles.fuente
-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.Para buscar en el directorio actual de forma recursiva:
fuente
Si necesita una búsqueda recursiva, tiene una variedad de opciones. Deberías considerar
ack
.De lo contrario, si tiene GNU
find
yxargs
: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:
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
yxargs
.fuente
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:
... y esto muestra los nombres y el contenido del archivo:
fuente
Es posible que desee
shopt -s nullglob
evitar mensajes de error si no hay archivos .h o no .cc.fuente
La forma más simple: grep -Ril "Tu texto" /
fuente