GNU/Linux >> Tutoriales Linux >  >> Linux

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

Linux y sistemas similares a 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 cadena en un archivo o desde la consola de salida de un comando, por 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 a 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 de grep más comunes que podemos usar para buscar.

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 con 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 de Grep

Opciones -i busca las mayúsculas y minúsculas de la cadena/patrón dadas de forma insensible.

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 usando -r opción que buscará recursivamente todo el archivo saltando enlaces simbólicos. Si desea incluir enlaces simbólicos, use -R .

En el siguiente ejemplo, el comando grep buscará la cadena 'ngnix' en todos los archivos dentro de /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 'backup' 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 para que coincida 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 ^ (símbolo de intercalación):el patrón que lo sigue debe aparecer al comienzo de cada línea. En el siguiente ejemplo, la cadena ^bienvenido coincidirá solo si aparece al principio de una línea.

$ grep “^welcome” filename

Expresión regular extendida

Utilice -E (o --extended-regexp) si quiere 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 :Por defecto, grep imprime la línea completa que contiene el patrón de búsqueda. Esta opción indica al comando grep que imprima solo las palabras coincidentes en lugar de la línea completa.

i :Esta opción solicita al comando grep que ignore las mayúsculas y minúsculas mientras coincide con el patrón.

Busca una palabra completa usando grep

El -w (word-regexp) marca 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:

Líneas de visualización después de la coincidencia de cadena

El -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 cadena

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:usando 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 archivo específico de la búsqueda

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

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

Conclusión

En este tutorial aprendimos a 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.


Linux
  1. ¿Cómo encontrar todos los archivos que no contienen una cadena de texto?

  2. ¿Cómo encontrar múltiples cadenas en archivos?

  3. Cómo usar el comando find de Linux para buscar archivos

  4. Comando de Linux:¿Cómo 'buscar' solo archivos de texto?

  5. ¿Cómo encontrar archivos de texto que no contengan texto en Linux?

Cómo usar el comando grep en Debian 10

Cómo encontrar archivos con el comando fd en Linux

Cómo usar grep en Linux

Encuentra texto en archivos en Linux usando grep

Cómo usar más comandos en Linux para leer archivos de texto grandes

Cómo encontrar y reemplazar texto en Vim