Comenzando con grep

Encuentra texto dentro de un directorio dado, recursivamente

Usando GNU grep

grep -r 'pattern' <directory path>

Para enumerar también los números de línea de las coincidencias, use la opción -n

grep -rn 'pattern' <directory path>

Para buscar solo archivos con un patrón particular glob

grep --include='*.txt' -r 'pattern' <directory path>

Excluir patrones de archivo o directorios

grep -R --exclude=*.log 'pattern' <directory path>
grep -R --exclude={*.log,*.class} 'pattern' <directory path>

grep -R --exclude-dir=tmp 'pattern' <directory path>
grep -R --exclude-dir={tmp,lib} 'pattern' <directory path>

Notas y otras opciones útiles

  • <ruta del directorio> se puede omitir si se busca en el directorio actual
  • Las opciones -R siguen todos los enlaces simbólicos, a diferencia de -r que sigue los enlaces simbólicos solo si están en el command line
  • -l para enumerar solo los archivos coincidentes
  • -h para suprimir el prefijo del nombre de archivo
  • --color=auto para resaltar patrones coincidentes
  • -m <num> para especificar el número máximo de coincidencias para cada entrada de archivo

Solución POSIX para buscar recursivamente

find <directory path> -type f -exec grep -l 'pattern' {} +
  • Se pueden usar opciones como -n, -l, etc. según sea necesario
  • Si {} + no es compatible, use {} \; en su lugar
  • Consulte la documentación de find para obtener más ayuda sobre el comando find, por ejemplo, cómo incluir/excluir tipos de archivos, directorios, etc.

Uso básico

Ignorar caso

Dado un archivo sample:

hello
Hello
HELLO_there

Un grep normal para “hola” devuelve:

$ grep "hello" sample 
hello

El uso de -i permite ignorar mayúsculas y minúsculas y hacer coincidir cualquier “hola”:

$ grep -i "hello" sample
hello
Hello
HELLO_there

Coincidencia de palabras completas

Dado un archivo sample:

hello world
ahello here
hello_there

Un grep normal para “hola” devuelve:

$ grep hello sample 
hello world
ahello here
hello_there

El uso de -w permite seleccionar aquellas líneas que contienen coincidencias que forman palabras completas:

$ grep -w hello sample 
hello world

Control de contexto Grep

Dado un archivo Sample llamado movieslist.

Troy
Gladiator
Robin Hood
King Arthur
BraveHeart
The Last Samurai

grep normal regresa

grep "Gladiator" movieslist
Gladiator

Ahora, use grep para imprimir las líneas de arriba o abajo del archivo.

Para imprimir la siguiente línea

grep -A 1 Gladiator movieslist 
Gladiator
Robin Hood

Para imprimir la línea de arriba

grep -B 1 Gladiator movieslist 
Troy
Gladiator

Para imprimir ambos

grep -C 1 Gladiator movieslist 
Troy
Gladiator
Robin Hood

Imprime solo la parte correspondiente de las líneas

echo "Prints only the matching part of the lines" | grep -o "matching"
# prints matching