Buscar desde la terminal con grep
Tabla de contenido:
- Sintaxis del comando Grep
- Cómo usar
greppara buscar una cadena en archivos - Invertir partido (Excluir)
- Cómo usar Grep para buscar una cadena en la salida del comando
- Búsqueda recursiva
- Mostrar solo el nombre del archivo
- Búsqueda insensible a mayúsculas y minúsculas
- Buscar palabras completas
- Mostrar números de línea
- Contar partidos
- Buscar varias cadenas (patrones)
- Modo silencioso
- Expresión regular básica
- Expresiones regulares extendidas
- Imprimir líneas antes de un partido
- Imprimir líneas después de un partido
- Conclusión
El comando
grep
que significa "impresión de expresión regular global" es uno de los comandos más potentes y comúnmente utilizados en Linux.
Grep busca en uno o más archivos de entrada líneas que coincidan con un patrón determinado y escribe cada línea coincidente en la salida estándar. Si no se especifican archivos,
grep
lee la entrada estándar, que generalmente es la salida de otro comando.
En este tutorial, le mostraremos cómo usar el comando
grep
través de ejemplos prácticos y explicaciones detalladas de las opciones
grep
más comunes de GNU.
Sintaxis del comando Grep
Antes de comenzar a usar el comando
grep
, comencemos por revisar la sintaxis básica.
Las expresiones de utilidad
grep
toman la siguiente forma:
grep PATTERN
Los artículos entre corchetes son opcionales.
-
OPTIONS: cero o más opciones. Grep proporciona una serie de opciones que controlan su comportamiento.PATTERN- Patrón de búsqueda.FILE: cero o más nombres de archivo de entrada.
Para poder buscar el archivo, el usuario que ejecuta el comando debe tener acceso de lectura al archivo.
Cómo usar
grep
para buscar una cadena en archivos
El uso más básico del comando
grep
es buscar una cadena (texto) en un archivo.
Por ejemplo, para mostrar las líneas del
/etc/passwd
que contiene la cadena
bash
, puede usar el siguiente comando:
grep bash /etc/passwd
La salida debería verse así:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Si la cadena incluye espacios, debe encerrarla entre comillas simples o dobles:
grep "Gnome Display Manager" /etc/passwd
Invertir partido (Excluir)
Para mostrar las líneas que no coinciden con un patrón, use la opción
-v
(o
--invert-match
).
Por ejemplo, para mostrar las líneas del
/etc/passwd
que no contienen la cadena
nologin
, puede usar el siguiente comando:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Cómo usar Grep para buscar una cadena en la salida del comando
En lugar de especificar archivos de entrada, puede canalizar la salida de otro comando a
grep
, y luego mostrar solo líneas que coincidan con un patrón dado.
Por ejemplo, para averiguar qué procesos se están ejecutando en su sistema como usuario
www-data
, puede usar el siguiente comando
ps
:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
También puede encadenar varias tuberías en el comando. Como puede ver en el resultado anterior, también hay una línea que contiene el proceso
grep
. Si no desea que se muestre esa línea, pase la salida a otra instancia
grep
como se muestra a continuación.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Búsqueda recursiva
Para buscar un patrón de forma recursiva, use la opción
-r
(o
--recursive
). Esto buscará en todos los archivos en el directorio especificado, omitiendo los enlaces simbólicos que se encuentran de forma recursiva. Para seguir todos los enlaces simbólicos, use la opción
-R
(o
--dereference-recursive
).
En el siguiente ejemplo, estamos buscando la cadena
linuxize.com
en todos los archivos dentro del directorio
/etc
:
grep -r linuxize.com /etc
El comando imprimirá las líneas coincidentes con el prefijo de la ruta completa al archivo.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Si en su lugar
-r
usa la opción
-R
,
grep
seguirá todos los enlaces simbólicos:
grep -R linuxize.com /etc
Observe la última línea de la salida. Esa línea no se imprime en el ejemplo anterior porque los archivos dentro del directorio
sites-enabled
para
sites-enabled
de Nginx son enlaces simbólicos a archivos de configuración dentro del directorio
sites-available
.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Mostrar solo el nombre del archivo
Para suprimir la salida
grep
predeterminada e imprimir solo los nombres de los archivos que contienen el patrón coincidente, puede usar la opción
-l
(o
--files-with-matches
).
Por ejemplo, para buscar en todos los archivos que terminan en
.conf
en el directorio de trabajo actual e imprimir solo los nombres de los archivos que contienen el tipo de cadena
linuxize.com
:
grep -l linuxize.com *.conf
La salida se verá más o menos así:
tmux.conf haproxy.conf
La opción
-l
generalmente se usa en combinación con la opción recursiva
-R
:
Búsqueda insensible a mayúsculas y minúsculas
Por defecto, el comando
grep
mayúsculas y minúsculas. Esto significa que los caracteres en mayúscula y minúscula se tratan como distintos.
Para ignorar mayúsculas y minúsculas al buscar, use la opción
-i
(o
--ignore-case
).
Por ejemplo, al buscar
Zebra
sin ninguna opción, el siguiente comando no mostrará ningún resultado, es decir, hay líneas coincidentes:
grep Zebra /usr/share/words
Pero si realiza una búsqueda sin distinción entre mayúsculas y minúsculas utilizando la opción
-i
, coincidirá con letras mayúsculas y minúsculas:
grep -i Zebra /usr/share/words
Especificar "Zebra" coincidirá con "zebra", "ZEbrA" o cualquier otra combinación de letras mayúsculas y minúsculas para esa cadena.
Buscar palabras completas
Al buscar "gnu",
grep
también imprimirá las líneas donde "gnu" está incrustado en palabras más grandes, como "cygnus" o "magnum".
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Para devolver solo aquellas líneas donde la cadena especificada es una palabra completa (encerrada por caracteres que no son palabras), use la opción
-w
(o
--word-regexp
).
az
,
AZ
y
0-9
) y guiones bajos (
_
). Todos los demás caracteres se consideran caracteres que no son palabras.
grep -w gnu /usr/share/words
Mostrar números de línea
Para mostrar el número de líneas que contienen una cadena que coincide con un patrón, use la opción
-n
(o
--line-number
). Al usar esta opción,
grep
imprimirá las coincidencias a la salida estándar con el prefijo del número de línea en el que se encontró.
Por ejemplo, para mostrar las líneas del
/etc/services
que contiene la cadena
bash
con el número de línea correspondiente, puede usar el siguiente comando:
grep -n 10000 /etc/services
El resultado a continuación nos muestra que las coincidencias se encuentran en las líneas 10423 y 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Contar partidos
Para imprimir un recuento de líneas coincidentes con la salida estándar, use la opción
-c
(o
--count
).
En el siguiente ejemplo, estamos contando el número de cuentas que tienen
/usr/bin/zsh
como shell.
grep -c '/usr/bin/zsh' /etc/passwd
Buscar varias cadenas (patrones)
Se pueden unir dos o más patrones de búsqueda utilizando el operador OR
|
.
Por defecto,
grep
interpreta el patrón como una expresión regular básica donde los metacaracteres como
|
pierden su significado especial, y deben usarse sus versiones reducidas.
En el siguiente ejemplo, estamos buscando todas las apariciones de las palabras
fatal
,
error
y
critical
en el archivo de error de registro de Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Modo silencioso
El
-q
(o
--quiet
) le dice a
grep
que no escriba nada en el terminal (salida estándar). Si se encuentra una coincidencia, el comando saldrá con el estado
0
. Esto es útil cuando se usa
grep
en los scripts de shell donde desea verificar si un archivo contiene una cadena y realizar una determinada acción dependiendo del resultado.
Aquí hay un ejemplo del uso de
grep
en modo silencioso como comando de prueba en una instrucción
if
:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Expresión regular básica
GNU Grep tiene dos conjuntos de características de expresión regular, Básico y Extendido. Por defecto,
grep
interpreta el patrón como una expresión regular básica.
Cuando se usa en el modo básico de expresión regular, todos los demás caracteres, excepto los metacaracteres, son en realidad expresiones regulares que coinciden entre sí. A continuación se muestra una lista de los metacaracteres más utilizados:
-
Use el símbolo
^(caret) para hacer coincidir la expresión al comienzo de una línea. En el siguiente ejemplo, la cadena^kangaroocoincidirá solo si ocurre al comienzo de una línea.grep "^kangaroo" file.txtUse el símbolo
$(dólar) para hacer coincidir la expresión al final de una línea. En el siguiente ejemplo, la cadenakangaroo$solo coincidirá si ocurre al final de una línea.grep "kangaroo$" file.txtUsa el
.(punto) símbolo para que coincida con cualquier carácter individual. Por ejemplo, para hacer coincidir cualquier cosa que comience conkanluego tenga dos caracteres y termine con el stringroo, puede usar el siguiente patrón:grep "kan..roo" file.txtUtilizar
(corchetes) para que coincida con cualquier carácter encerrado entre corchetes. Por ejemplo, si encuentra las líneas que contienenaccepto "accent", puede usar el siguiente patrón:grep "accet" file.txtUtilizar
(corchetes) para que coincida con cualquier carácter encerrado entre corchetes. El siguiente patrón coincidirá con cualquier combinación de cadenas que contenganco(any_letter_except_l)a, comococa,cobalt, etc., pero no coincidirá con las líneas que contienencola,grep "coa" file.txt
Para escapar del significado especial del siguiente carácter, use el símbolo
\
(barra invertida).
Expresiones regulares extendidas
Para interpretar el patrón como una expresión regular extendida, use la opción
-E
(o
--extended-regexp
). Las expresiones regulares extendidas incluyen todos los metacaracteres básicos, junto con metacaracteres adicionales para crear patrones de búsqueda más complejos y potentes. A continuación hay algunos ejemplos:
-
Haga coincidir y extraer todas las direcciones de correo electrónico de un archivo dado:
grep -E -o "\b+@+\.{2, 6}\b" file.txtHaga coincidir y extraiga todas las direcciones IP válidas de un archivo determinado:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
La opción
-o
se usa para imprimir solo la cadena coincidente.
Imprimir líneas antes de un partido
Para imprimir un número específico de líneas antes de las líneas coincidentes, use la opción
-B
(o
--before-context
).
Por ejemplo, para mostrar cinco líneas de contexto principal antes de las líneas coincidentes, usaría el siguiente comando:
Imprimir líneas después de un partido
Para imprimir un número específico de líneas después de las líneas coincidentes, use la opción
-A
(o
--after-context
).
Por ejemplo, para mostrar cinco líneas de contexto final después de las líneas coincidentes, usaría el siguiente comando:
Conclusión
El comando
grep
permite buscar un patrón dentro de los archivos. Si se encuentra una coincidencia, grep imprimirá las líneas que contienen el patrón especificado.
Hay mucho más que aprender sobre Grep en la página del Manual del usuario de Grep.
terminal grepBuscar texto en archivos escaneados con Recollect Desktop
Este programa va donde otros programas de búsqueda no lo hacen: correo electrónico, archivos PDF, escaneados documentos, y más.
Buscar información en archivos de texto Archivos de índice Buscar palabras Lite
ÍNdice Buscar palabras Lite es como su propio Google ... para tantos archivos de texto están en su disco duro.
Buscar y reemplazar texto en varios archivos a granel en Windows
Buscar y reemplazar herramienta lo ayudará a buscar y reemplazar texto en múltiples archivos a granel. Simplemente ingrese el texto y presione Reemplazar para reemplazar texto al instante.







