Comando grep en Linux: opciones, patrones y ejemplos de expresiones regulares

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 6,86 KB

Comando grep: buscar patrones en archivos y uso de expresiones regulares

El comando grep nos permite buscar, dentro de los archivos, las líneas que concuerdan con un patrón. Si no especificamos ningún nombre de archivo, toma la entrada estándar, con lo que podemos encadenarlo con otros filtros.

Por defecto, grep imprime las líneas encontradas en la salida estándar. Es decir, podemos verlo directamente en la pantalla o redirigir la salida estándar a un archivo.

Como tiene muchísimas opciones, a continuación se muestran las más usadas:

Opciones más comunes

  • -c — En lugar de imprimir las líneas que coinciden, muestra el número de líneas que coinciden.
  • -e PATRON — Permite especificar varios patrones de búsqueda o proteger patrones que comienzan con el signo -.
  • -r — Busca recursivamente dentro de todos los subdirectorios del directorio actual.
  • -v — Muestra las líneas que no coinciden con el patrón buscado.
  • -i — Ignora la distinción entre mayúsculas y minúsculas.
  • -n — Numera las líneas en la salida.
  • -E — Permite usar expresiones regulares extendidas. Equivalente a egrep.
  • -o — Muestra sólo la parte de la línea que coincide con el patrón.
  • -f ARCHIVO — Extrae los patrones del archivo especificado; los patrones deben ir uno por línea.
  • -H — Imprime el nombre del archivo con cada coincidencia.

Ejemplos

$ grep 'a*' archivo
$ cat archivo | grep 'a*'

# Mostrar por pantalla las líneas que contienen comentarios en el archivo /boot/grub/menu.lst
$ grep '#' /boot/grub/menu.lst

# Enviar a un fichero las líneas del archivo /boot/grub/menu.lst que no son comentarios
$ grep -v '#' /boot/grub/menu.lst

# Contar el número de interfaces de red que tenemos definidos en el fichero /etc/network/interfaces
$ grep -c 'iface' /etc/network/interfaces

# Mostrar las líneas de un fichero que contienen la palabra BADAJOZ o HUELVA
$ grep -e 'BADAJOZ' -e 'HUELVA' archivo

# Mostrar las líneas de un fichero que contienen la palabra BADAJOZ o HUELVA, numerando las líneas de salida
$ grep -n -e 'BADAJOZ' -e 'HUELVA' archivo

# Mostrar los ficheros que contienen la palabra TOLEDO en el directorio actual y todos sus subdirectorios
$ grep -r 'TOLEDO' *

Metacaracteres en expresiones regulares

Algunos metacaracteres básicos y su significado:

MetacarácterQué representa
?El elemento precedente es opcional y debe coincidir una vez como máximo (0 ó 1).
*El elemento precedente debe coincidir cero o más veces.
{n}El elemento precedente debe coincidir exactamente n veces.
+El elemento precedente debe coincidir una o más veces.
{,m}El elemento precedente coincide entre 0 y m veces (cero hasta m veces).
{n,m}El elemento precedente debe coincidir al menos n veces pero no más de m veces.

Dos expresiones regulares pueden unirse con el operador |. La expresión resultante representa cualquier cadena que responda a uno de los dos patrones.

Ejemplos de patrones

PatrónQué representa
pabloLa cadena pablo.
^pabloLa cadena pablo al comienzo de una línea.
pablo$La cadena pablo al final de una línea.
^pablo$La cadena pablo formando una única línea.
niñ[oa]La cadena niño o niña.
ni[^aeiou]oLa tercera letra no es una vocal minúscula.
ga.oLa tercera letra es cualquier carácter (ej.: gato, gaao, ga_o).
^....$Cualquier línea que contenga exactamente 4 caracteres.
^\.Cualquier línea que comienza por un punto.
^[^.]Cualquier línea cuya primera posición no es un punto.
niños*Coincide con niño, niños, niñoss, niñosss, etc. (cero o más 's' después de 'niño').
“niño”niño entre comillas dobles.
"?niño"?niño con o sin comillas dobles (comillas opcionales).
[a-z][a-z]*Una o más letras minúsculas.
[a-z]+Una o más letras minúsculas (sólo válido en algunas aplicaciones con metacaracteres extendidos).
[^0-9A-Z]Cualquier carácter que no sea ni número ni letra mayúscula.
[a-zA-Z]Cualquier letra, ya sea mayúscula o minúscula.
[Ax5]Cualquier carácter que sea A, x o 5.
niño|niña|nadaCoincide con una de las tres palabras: niño, niña o nada.
(s|arb)ustoCoincide con la palabra susto o arbusto.
ga?t[oa]Coincide con gato, gata, gasto, gaita, etc. ('a' opcional después de 'g').
\<gaCualquier palabra que empiece por ga (uso de límite de palabra: \< ).
ño\>Cualquier palabra que termine por ño (uso de límite de palabra: \> ).
\<niño\>La palabra exacta niño (delimitada por límites de palabra).
o\{2,\}Dos o más 'o' consecutivas en una misma secuencia.

Si necesitas ejemplos adicionales o una explicación más detallada sobre expresiones regulares específicas para grep (básicas o extendidas), puedo ampliar cualquiera de las secciones anteriores con casos prácticos y variantes para entornos Linux.

Entradas relacionadas: