Looking for grep Answers? Try Ask4KnowledgeBase
Looking for grep Keywords? Try Ask4Keywords

grepEmpezando con grep


Observaciones

grep imprime líneas que contienen una coincidencia para un patrón dentro de los archivos.

grep puede usar expresiones regulares y tiene varias opciones para mejorar la calidad de los resultados.

Referencias

Versiones

POSIX grep

Versión Fecha de lanzamiento
POSIX.2 1992-01-01
IEEE Std 1003.1-2001 2001-12-06
IEEE Std 1003.1, Edición 2004 2004-01-01
IEEE Std 1003.1, Edición 2013 2013-04-19
IEEE Std 1003.1, Edición 2016 2016-09-30

Illumos / OpenSolaris grep

Versión Fecha de lanzamiento
2005-06-14 2005-06-14
2005-09-06 2005-09-06
2012-03-30 2012-03-30
2012-09-17 2012-09-17
2013-05-14 2013-05-14

GNU grep

Versión Fecha de lanzamiento
2.0 1996-10-01
2.2 1998-04-27
2.3 1999-02-14
2.4.1 2000-03-01
2.4.2 2000-03-09
2.4 1999-12-03
2.5.1 2004-10-29
2.5.1a 2004-11-19
2.5.3 2007-08-02
2.5.4 2009-02-09
2.5 2002-03-13
2.6.1 2010-03-25
2.6.2 2010-03-29
2.6.3 2010-04-02
2.6 2010-03-23
2.7 2010-09-20
2.8 2011-05-13
2.9 2011-06-21
2,10 2011-11-16
2,11 2012-03-02
2.12 2012-04-23
2,13 2012-07-04
2,14 2012-08-20
2.15 2013-10-26
2.16 2014-01-01
2,17 2014-02-17
2.18 2014-02-20
2.19 2014-05-22
2.20 2014-06-03
2.21 2014-11-23
2,22 2015-11-01
2.23 2016-02-04
2.24 2016-03-10
2,25 2016-04-21
2,26 2016-10-02
2.27 2016-12-06
2,28 2017-02-06

BSD grep / FreeGrep

Versión Fecha de lanzamiento
OpenBSD 3.0 2001-12-01
OpenBSD 3.4 2003-11-01
OpenBSD 3.5 2004-05-01
OpenBSD 3.6 2004-11-01
OpenBSD 3.7 2005-05-19
OpenBSD 3.8 2005-11-01
OpenBSD 3.9 2006-05-01
OpenBSD 4.0 2006-11-01
OpenBSD 4.1 2007-05-01
OpenBSD 4.3 2008-05-01
OpenBSD 4.8 2010-11-01
OpenBSD 5.0 2011-11-01
OpenBSD 5.3 2013-05-01
OpenBSD 5.7 2015-05-01
OpenBSD 5.8 2015-10-18
OpenBSD 5.9 2016-03-29
NetBSD 2.0 2004-12-09
NetBSD 4.0 2007-12-19
NetBSD 6.0 2012-10-17
NetBSD 7.0 2015-09-25
FreeBSD 9.0 2012-01-02
FreeBSD 10.0 2014-01-16

Uso básico

Ejecutando el comando:

grep sam someFile.txt
 

Cuando someFile.txt contiene:

fred 14 m foo
sam 68 m bar
christina 83 f baz
bob 22 m qux
Sam 41 m quux
 

Producirá esta salida:

sam 68 m bar
 

Buscar texto dentro de un directorio dado, recursivamente

Usando GNU grep

grep -r 'pattern' <directory path>
 

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

grep -rn 'pattern' <directory path>
 

Para buscar solo archivos con un patrón global particular

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

Excluir patrones de archivos 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.

  • <directory path> 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 enlaces simbólicos solo si están en la línea de comando
  • -l para listar solo archivos coincidentes
  • -h para suprimir el prefijo de nombre de archivo
  • --color=auto para resaltar patrones combinados
  • -m <num> para especificar el número máximo de coincidencias para cada entrada de archivo

POSIX solución 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 lugar
  • Consulte la documentación de encontrar para obtener más ayuda sobre el comando de find como cómo incluir / excluir tipos de archivos, directorios, etc.

Control de contexto de Grep

Dada una muestra de archivo llamada lista de películas.

Troy
Gladiator
Robin Hood
King Arthur
BraveHeart
The Last Samurai
 

Grep normal devuelve

grep "Gladiator" movieslist
Gladiator
 

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

Para imprimir la linea de abajo

grep -A 1 Gladiator movieslist 
Gladiator
Robin Hood
 

Para imprimir la linea anterior

grep -B 1 Gladiator movieslist 
Troy
Gladiator
 

Para imprimir ambos

grep -C 1 Gladiator movieslist 
Troy
Gladiator
Robin Hood
 

Ignorar caso

Dada una sample archivo:

hello
Hello
HELLO_there
 

Un grep normal para "hola" devuelve:

$ grep "hello" sample 
hello
 

Usar -i permite ignorar mayúsculas y minúsculas y hacer coincidir cualquier "hola"

$ grep -i "hello" sample
hello
Hello
HELLO_there
 

Emparejar palabras completas

Dada una sample archivo:

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
 

Imprime solo la parte coincidente de las lineas

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