LINUX

Cómo usar el comando Grep para buscar texto en archivos

En los sistemas Linux y tipo UNIX, toda la información de configuración del sistema se almacena y manipula en forma de texto sin formato. Por lo tanto, la búsqueda de texto sería una tarea muy común para la edición y el análisis de registros.

El comando grep permite buscar un texto o una cadena en un archivo o desde la consola de salida de un comando, para un término o patrón que coincida con expresiones regulares. Cuando grep encuentra una coincidencia en una línea, copia los resultados en la pantalla, es decir, stdout.

En este tutorial aprendemos cómo usar el comando grep con ejemplos prácticos.

Comando Grep

Revisemos la sintaxis del comando grep antes de comenzar a explicar su uso.

grep [OPTIONS] PATTERN [FILE...]

Discutiremos en detalle las opciones y patrones grep más comunes que podemos usar para realizar búsquedas.

Cómo buscar una cadena en un archivo

En el siguiente ejemplo, grep busca en el archivo / etc / passwd la cadena ‘root’ y redirige la salida a stdout.

$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

Buscar texto de varios archivos

Puede buscar texto específico de varios archivos usando el siguiente comando:

$ grep "root" /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:root
/etc/group:bin:x:1:root,bin,daemon
/etc/group:daemon:x:2:root,bin,daemon
/etc/group:sys:x:3:root,bin,adm
/etc/group:adm:x:4:root,adm,daemon
/etc/group:disk:x:6:root
/etc/group:wheel:x:10:root

Búsqueda insensible a mayúsculas y minúsculas Grep

Opciones -i busca la cadena / patrón dado sin distinción de mayúsculas y minúsculas.

En los siguientes ejemplos, grep coincide con todas las palabras como «hal», «HAL» sin distinción entre mayúsculas y minúsculas:

$ grep -i HAL /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

Búsqueda recursiva

La búsqueda recursiva se logra utilizando -r opción que buscará de forma recursiva todos los archivos omitiendo enlaces simbólicos. Si desea incluir enlaces simbólicos, utilice -R.

En el siguiente ejemplo, el comando grep buscará la cadena ‘ngnix’ en todos los archivos dentro /var directorio.

$ grep -r nginx /var

Buscar una cadena en la salida del comando (stdout)

Puede usar canalizar la salida para un comando y grep para el patrón de su salida.

En el siguiente ejemplo, estoy buscando un archivo con el nombre ‘copia de seguridad’ usando el comando ls

$ ls | grep backup

Aquí estoy haciendo múltiples tuberías y buscando el proceso ‘docker’ y ‘apache’ desde el comando ps.

$ ps -ef | grep docker | grep apache

Expresiones regulares en archivos

Expresiones regulares es un patrón que se corresponde con cada línea de entrada. Basic y Extended son las dos expresiones regulares utilizadas por el comando grep.

Expresión regular básica

De forma predeterminada, grep interpreta el patrón como una expresión regular básica.

El símbolo ^ (signo de intercalación): el patrón que lo sigue debe aparecer al principio de cada línea. En el siguiente ejemplo, la cadena ^ welcome coincidirá solo si aparece al principio de una línea.

$ grep “^welcome” filename

Expresión regular extendida

Usar -E (o –extended-regexp) si desea que grep lo entienda como una expresión regular extendida.

El siguiente comando extraerá todos los enlaces de un archivo

$ grep –Eoi '<a[^>]+>.*</a>' filename

o : De forma predeterminada, grep imprime la línea completa que contiene el patrón de búsqueda. Esta opción le indica al comando grep que imprima solo las palabras coincidentes en lugar de la línea completa.

i : Esta opción pide al comando grep que ignore el caso mientras coincide con el patrón.

Buscar una palabra completa usando grep

los -w (word-regexp) para grep hará que la expresión dada coincida solo con palabras completas.

$ grep -iw "samba" /etc/samba/smb.conf
# This is the main Samba configuration file. You should read the
# here. Samba has a huge number of configurable options (perhaps too
# For a step to step guide on installing, configuring and using samba,
# read the Samba-HOWTO-Collection. This may be obtained from:

Mostrar líneas después de la coincidencia de cadenas

los -A opción que muestra el N líneas después de la coincidencia de cadena.

$ grep -A 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

Mostrar líneas antes de la coincidencia de cadenas

Nosotros podemos usar -B opción para mostrar N líneas antes de la cadena para un archivo dado

$ grep -B 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

Buscar varias cadenas

Podemos buscar múltiples patrones o cadenas usando el operador OR | y |. -E (extended-regexp) controla si necesita escapar de ciertos caracteres especiales. -e es estrictamente la bandera para indicar el patrón con el que desea hacer coincidir.

Ejemplo 1: uso de la opción -E

$ ls | grep -E “li|ovo”
linux24
ovo8_linux24.sh

O

$ grep -E "foo|bar" *.txt

Ejemplo 2: sin -E

$ ls | grep ‘li|ovo’
linux24
ovo8_linux24.sh

O

$ grep "foo|soul|bar" *.txt

Excluir un archivo específico de la búsqueda

Puede utilizar la opción -v para ignorar la búsqueda. El siguiente comando buscará la cadena ‘error’ en todos los archivos excepto en ‘syslog.log’

$ grep -r error * | grep -v ‘/syslog.log/’

Conclusión

En este tutorial aprendimos cómo usar el comando grep para buscar texto en archivos. Espero que haya disfrutado leyendo esto y deje sus sugerencias en la sección de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar