GNU/Linux >> Tutoriales Linux >  >> Linux

Encuentra texto en archivos en Linux usando grep

Este tutorial se enfoca en encontrar texto en archivos usando el comando grep y expresiones regulares.

Al trabajar en un sistema Linux, buscar texto en archivos es una tarea muy común que realizan los administradores de sistemas todos los días.

Es posible que desee buscar líneas específicas en un archivo de registro para solucionar problemas de servidores.

En algunos casos, le interesa encontrar acciones realizadas por usuarios específicos o desea restringir las líneas de un archivo grande a un par de líneas.

Por suerte para ti, hay varias formas de encontrar texto en archivos en Linux pero el comando más popular es el comando grep.

Desarrollado por Ken Thompson en los primeros días de Unix, grep (g buscar localmente una r e regular expresión x y p imprimir ) ha sido utilizado durante más de 45 años por administradores de sistemas de todo el mundo.

En este tutorial, nos centraremos en el comando grep y cómo puede ayudarnos a encontrar texto en archivos de todo nuestro sistema.

¿Listo?

Sintaxis Grep en Linux

Como se especificó anteriormente, para buscar texto en archivos en Linux , debe usar el comando grep con la siguiente sintaxis

$ grep <option> <expression> <path>

Tenga en cuenta que las opciones y la ruta son opcionales.

Antes de enumerar y detallar todas las opciones proporcionadas por grep, tengamos una forma rápida de memorizar la sintaxis del comando grep.

Para recordar la sintaxis del comando grep, recuerde que grep se puede escribir como grEP lo que significa que la expresión viene antes que el camino.

Esta es una excelente manera de recordar la sintaxis de grep y la sintaxis de búsqueda al mismo tiempo, pero la sintaxis de búsqueda es exactamente lo contrario:la ruta primero y la expresión después.

Ejemplos rápidos de grep

Hay opciones complejas que se pueden usar con grep, pero comencemos con una serie de ejemplos muy rápidos.

Listado de usuarios usando grep

En Linux, como probablemente ya lo sepa, las cuentas de usuario se enumeran en un archivo específico llamado archivo passwd.

Para encontrar la cuenta raíz en un archivo específico, simplemente ingrese su texto y el archivo en el que desea buscar.

$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

Otra forma muy popular de usar el comando grep es buscar un proceso específico en su sistema Linux.

Filtrado de Procesos usando grep

Como se explicó en uno de nuestros tutoriales anteriores, debe usar el "ps ” para enumerar todos los procesos que se están ejecutando actualmente en su sistema.

Puede canalizar el "ps ” comando con el “grep ” para filtrar los procesos que le interesan.

$ ps aux | grep <process>

Si está interesado en procesos bash, por ejemplo, puede escribir el siguiente comando

$ ps aux | grep bash

root      1230  0.0  0.0  23068  1640 tty1     S+   Jan11   0:00 -bash
user      2353  0.0  0.1  23340  5156 pts/0    Ss   03:32   0:00 -bash
user      2473  0.0  0.0  14856  1056 pts/0    S+   03:45   0:00 grep --color=auto bash
user      6685  0.0  0.0  23140  1688 pts/2    Ss+  Nov09   0:00 bash

Nota :si no está seguro de cómo usar tuberías en Linux, aquí hay una guía completa sobre la redirección de entrada y salida.

Inspección de registros del Kernel de Linux con grep

Otro gran uso del comando grep es inspeccionar el anillo de búfer del kernel de Linux .

Esto se usa mucho cuando se realizan operaciones de resolución de problemas en sistemas Linux porque el kernel escribirá en su anillo de búfer al iniciar o arrancar.

Digamos, por ejemplo, que introdujo un nuevo disco en su sistema y no está seguro del nombre que se le dio a este nuevo disco.

Para conocer esta información, puede utilizar el “dmesg ” y canalícelo al comando grep.

$ dmesg | grep -E sd.{1}

Opciones de comando Grep

El comando grep es muy útil por sí mismo, pero es aún más útil cuando se usa con opciones.

El comando grep literalmente tiene un montón de opciones diferentes.

Las siguientes secciones servirán como guía para usar esas opciones correctamente y se darán ejemplos a lo largo del camino.

Buscar cadena específica usando grep

En algunos casos, puede interesarle encontrar una cadena o texto muy específico en un archivo.

Para restringir la búsqueda de texto a una cadena específica, debe usar comillas antes y después de su término de búsqueda.

$ grep "This is a specific text" .

Para ilustrar esta opción, supongamos que está buscando un nombre de usuario específico en su sistema.

Como muchos nombres de usuario pueden comenzar con el mismo prefijo, debe buscar el usuario entre comillas.

$ grep "devconnected" /etc/passwd

Buscar texto usando expresiones regulares

Una de las mejores características del comando grep es la capacidad de buscar texto usando expresiones regulares.

Las expresiones regulares son definitivamente una gran herramienta para dominar:permiten a los usuarios buscar texto en función de patrones, como texto que comienza con letras específicas o texto que se puede definir como una dirección de correo electrónico.

Grep admite dos tipos de expresiones regulares:básicas y extendido expresiones regulares.

Expresiones regulares básicas (BRE)

La principal diferencia entre las expresiones regulares básicas y las extendidas es el hecho de que puede usar símbolos de expresiones regulares con BRE (expresiones regulares básicas), pero tendrán que estar precedidos por una barra invertida.

Los patrones de expresiones regulares más comunes se detallan a continuación con ejemplos:

  • ^ símbolo :también llamado símbolo de intercalación, este pequeño símbolo de sombrero se usa para definir el comienzo de una línea. Como consecuencia, cualquier texto después del símbolo de intercalación se comparará con las líneas que comienzan con este texto.

Por ejemplo, para encontrar todas las unidades que comienzan con "sd" (también llamados discos SCSI), puede usar el símbolo de intercalación con grep.

$ lsblk | grep "^sb"
  • $ símbolo :el signo de dólar es lo opuesto al símbolo de intercalación, se usa para definir el final de la línea. Como consecuencia, la coincidencia de patrones se detendrá justo antes del signo de dólar. Esto es particularmente útil cuando desea orientar un término específico.

Para ver todos los usuarios que tienen bash shell en su sistema, puede escribir el siguiente comando

$ cat /etc/passwd | grep "bash$"
  • . (símbolo de punto):el símbolo de punto se utiliza para hacer coincidir un solo carácter en una expresión regular. Esto puede ser especialmente útil cuando los términos de búsqueda contienen las mismas letras al principio y al final, pero no en el medio.

Si, por ejemplo, tiene dos usuarios en su sistema, uno llamado "bob" y otro llamado "bab", puede encontrar a ambos usuarios usando el símbolo de punto.

$ cat /etc/passwd | grep "b.b"
  • [ ] (símbolo de corchetes):este símbolo se usa para hacer coincidir solo un subconjunto de caracteres. Si desea hacer coincidir solo los caracteres "a", o "o" o "e", debe encerrarlos entre paréntesis.

Volviendo al ejemplo de "bob", si desea limitar su búsqueda a "bob" y "bab", puede escribir el siguiente comando

$ cat /etc/passwd | grep "b[ao]b"

Utilizando todas las opciones proporcionadas anteriormente, es posible aislar palabras sueltas en un archivo:combinando el símbolo de intercalación con el símbolo del dólar.

$ grep "^word$" <file|path>

Por suerte para ti, no tienes que escribir esos caracteres cada vez que quieras buscar entradas de una sola palabra.

Puede utilizar el "-w ” opción en su lugar.

$ grep -w <expression> <file|path>

Expresiones regulares extendidas (ERE)

Las expresiones regulares extendidas, como su nombre lo indica, son expresiones regulares que usan expresiones más complejas para hacer coincidir cadenas.

Puede usar expresiones regulares extendidas para crear una expresión que coincida con una dirección de correo electrónico, por ejemplo.

Para buscar texto en archivos usando expresiones regulares extendidas, debe usar la opción "-E".

$ grep -E <expression> <path>

Un gran uso de las expresiones regulares extendidas es la capacidad de buscar múltiples términos de búsqueda, por ejemplo.

Buscar varias cadenas en un archivo

Para buscar múltiples cadenas en un archivo, use el “-E ” y coloque sus diferentes términos de búsqueda separados por líneas rectas (que representan operadores OR en expresiones regulares )

$ grep -E "text1|text2|text3" <path>

Volviendo a nuestro ejemplo anterior de grep, puede encontrar la cuenta raíz y la cuenta bob usando expresiones regulares extendidas.

$ grep -E "root|bob" /etc/passwd

Busca direcciones IP usando grep

En algunos casos, es posible que desee aislar las direcciones IP en un solo archivo:el uso de expresiones regulares extendidas es una excelente manera de encontrar direcciones IP fácilmente.

Muchos sitios web diferentes ofrecen expresiones regulares listas para usar:vamos a usar esta para las direcciones IP.

"\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

¿Cómo leerías esta expresión regular?

Una dirección IP está formada por 4 números de 3 dígitos separados por puntos, esto es exactamente lo que describe esta expresión regular.

([0-9]{1,3}\.){3}      = 3 3-digits numbers separated by dots

[0-9]{1,3}             = the last 3-digits number ending the IP address

Así es como buscaría direcciones IP usando el comando grep

grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" <file|path>

Busca direcciones URL usando grep

Del mismo modo, es totalmente posible buscar direcciones URL en un archivo si trabaja con la administración del sitio web a diario.

Nuevamente, muchos sitios web brindan expresiones regulares para las URL, pero vamos a usar esta.

grep -E '(http|https)://[^/"]+' <file|path>

Busca direcciones de correo electrónico usando grep

Finalmente, es posible buscar direcciones de correo electrónico usando expresiones regulares extendidas.

Para encontrar direcciones de correo electrónico, utilizará la siguiente expresión regular

grep -E "\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" <file|path>

Ahora que ha visto cómo usar expresiones regulares extendidas con grep, veamos cómo puede encontrar texto recursivamente en un archivo usando opciones.

Buscar texto recursivamente con grep

Para encontrar texto de forma recursiva (es decir, explorar cada directorio y sus elementos secundarios) en Linux, debe usar "grep" con la opción "-r" (para recursivo)

$ grep -R <expression> <path>

Por ejemplo, para buscar todos los archivos que contengan la palabra "log" en el directorio /var/log, escribiría

$ grep -R "log$" /var/log

Con este comando, es muy probable que vea muchas entradas con permiso denegado.

Para ignorar esas entradas con permiso denegado, redirija la salida de su comando a /dev/null

$ grep -R "log$" /var/log 2> /dev/null

Para encontrar texto recursivamente, también puede usar la opción "-d" con la acción "recursiva".

$ grep -d recurse "log$" /var/log

La búsqueda recursiva de texto puede ser bastante útil cuando intenta encontrar archivos de configuración específicos en su sistema.

Imprimir números de línea con grep

Como puede ver en nuestros ejemplos anteriores, pudimos aislar líneas que coincidían con el patrón especificado.

Además, si los archivos contienen miles de líneas, sería doloroso identificar el archivo pero no el número de línea.

Afortunadamente para ti, la opción grep tiene una opción para imprimir números de línea junto con las diferentes coincidencias.

Para mostrar los números de línea usando grep, simplemente use “-n ” opción.

$ grep -n <expression> <path>

Volviendo a nuestro ejemplo de lista de usuarios, si queremos saber en qué línea están esas entradas, escribiríamos

$ grep -n -E "root|bob" /etc/passwd

Encuentre texto con grep usando la opción que no distingue entre mayúsculas y minúsculas

En algunos casos, es posible que no esté seguro si el texto está escrito con mayúsculas. o minúsculas letras.

Afortunadamente para usted, el comando grep tiene una opción para buscar texto en archivos usando una opción que no distingue entre mayúsculas y minúsculas.

Para buscar texto usando la opción que no distingue entre mayúsculas y minúsculas, simplemente use el “-i ” opción.

$ grep -i <expression> <path>

Excluir patrones de grep

Grep se usa como una forma de identificar archivos que contienen archivos específicos, pero ¿qué sucede si desea hacer exactamente lo contrario?

¿Qué pasaría si quisiera encontrar archivos que no contengan una cadena específica en su sistema Linux?

Este es todo el propósito de la opción de búsqueda inversa de grep.

Para excluir archivos que contienen una cadena específica, use "grep" con la opción "-v".

$ grep -v <expression> <file|path>

Como pequeño ejemplo, supongamos que tiene tres archivos, pero dos de ellos contienen la palabra "registro".

Para excluir esos archivos, tendría que realizar una coincidencia inversa con la opción "-v".

Mostrar nombres de archivos usando grep

En algunos casos, no está interesado en encontrar texto dentro de los archivos, sino solo en sus nombres de archivo.

Para imprimir solo los nombres de archivo, y no el nombre de archivo con la salida real, use la opción "-l".

$ grep -l <expression> <path>

Usando nuestro ejemplo anterior, no obtendríamos el contenido del archivo, sino solo el nombre del archivo.

Conclusión

En este tutorial, aprendió cómo puede encontrar fácilmente texto en archivos en Linux.

Aprendió que puede usar muchas opciones diferentes:expresiones regulares básicas o más avanzadas Expresiones regulares (extendidas) si busca hacer coincidir direcciones IP o números de teléfono, por ejemplo.

También descubrió que puede realizar búsquedas inversas para encontrar archivos no coincidiendo con un patrón específico en su sistema.

Si está interesado en la administración del sistema Linux, tenemos una sección completa dedicada a ella en el sitio web, ¡así que asegúrese de echarle un vistazo!


Linux
  1. Uso de sed para buscar y reemplazar archivos de texto en Linux

  2. Uso del comando de búsqueda de Linux:uso con ejemplos

  3. Comandos de búsqueda de Linux

  4. Cómo encontrar texto específico usando GREP en Linux

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

Uso de less para ver archivos de texto en la línea de comandos de Linux

Cómo encontrar archivos en Linux

Comando Grep en Linux (Buscar texto en archivos)

Encuentra archivos grandes en Linux

Cómo encontrar archivos usando la línea de comandos en la terminal de Linux

Cómo proteger con contraseña los archivos de texto usando Vim Editor en Linux