Grep, o Global Regular Expression Print, es un comando de Linux extremadamente útil para encontrar patrones coincidentes. Puede examinar archivos y directorios, y también leer entradas de comandos. Busca con regex o expresiones regulares e imprime líneas desde un archivo que coincide con el patrón dado.
En esta publicación, veremos cómo usar el comando Grep en Linux. Los comandos discutidos aquí han sido probados en Ubuntu 20.04. Los mismos comandos Grep también funcionan para Debian, Mint, Fedora y CentOS.
Instalando el comando grep
La mayoría de las distribuciones de Linux, incluida Ubuntu 20.04 LTS, vienen con grep instalado. En caso de que su sistema no tenga Grep instalado, puede instalarlo usando el siguiente comando en la Terminal:
$ Sudo apt-get install grep
Sintaxis del comando Grep
La sintaxis básica del comando Grep es la siguiente:
$ grep [options] PATTERN [FILE...]
Uso del comando Grep
Encontrar una palabra en un archivo
Con Grep, puede buscar cualquier palabra en un archivo específico. La sintaxis sería:
$ grep <word> <filename>
Por ejemplo, el siguiente comando buscará la palabra "Donuts" en el archivo "Donuts.txt".
$ grep Donuts Donuts.txt
Encontrar una palabra en varios archivos
También puede buscar una palabra específica en varios archivos.
$ grep <word> <filename1> < filename2>
Por ejemplo, el siguiente comando buscará la palabra "Donuts" tanto en "Donuts.txt" como en "cakes.txt".
$ grep Donuts Donuts.txt cakes.txt
Ignorar caso
Grep realiza búsquedas que distinguen entre mayúsculas y minúsculas de forma predeterminada, lo que significa que trata "Donut" y "donuts" de manera diferente. Si volvemos a ejecutar el comando anterior con "donuts", esta vez no verá ningún resultado.
$ grep donuts Donuts.txt
Para ignorar el caso, deberá agregar "-i ” a tu comando así:
$ grep –i <word> <filename>
Encontrar un archivo por extensión en un directorio
También puede encontrar un archivo en un directorio específico por su extensión. Utilice la siguiente sintaxis para hacerlo:
$ ls ~/<directory> | grep .<file type>
Por ejemplo, para encontrar todos los archivos ".jpeg" en la carpeta "Descargas", el comando sería:
$ ls ~/Downloads | grep .jpeg
Líneas de impresión que no coinciden con un patrón
Con Grep, también puede imprimir las líneas que no coinciden con su patrón agregando “-v ” a tu mando. Utilice la siguiente sintaxis para hacerlo:
$ grep -v <word> <filename>
Por ejemplo, el siguiente comando imprimirá todas las líneas excepto la que contiene la palabra "Donuts".
Imprimiendo solo la palabra coincidente
Por defecto, grep imprime toda la línea que contiene el patrón. Para imprimir solo la palabra coincidente, agregue "-o ” a tus órdenes.
$ grep -o <word> <filename>
Por ejemplo, el siguiente comando imprimirá solo la palabra "Donuts" en lugar de imprimir la línea completa del archivo "Donuts.txt".
Número de línea de impresión del patrón y la línea coincidentes
Por defecto, grep imprime toda la línea que contiene el patrón. Para imprimir tanto el número de línea como la línea que contiene la palabra coincidente, agregue “-n ” a tus órdenes.
$ grep -n <word> <filename>
Por ejemplo, el siguiente comando imprimirá tanto el número de línea como la línea que contiene la palabra "Donuts".
$ grep -n Donuts Donuts.txt
Impresión de nombres de archivo que coinciden con un patrón
Para imprimir todos los archivos en su directorio actual que coincidan con su patrón, use la siguiente sintaxis:
$ grep -l “<word>” *
Por ejemplo, el siguiente comando imprimirá todos los archivos que contengan la palabra "Hola":
$ grep -l “Hello” *
Impresión de la palabra coincidente completa
Por defecto, grep imprime todas las palabras que coinciden con tu patrón, incluso si son parte de una palabra. Mira la imagen de abajo.
Buscamos la cadena “do ” y puede ver todas las líneas que contienen “do ”. Para que coincida con la palabra exacta, agregue "-w ” a tus órdenes.
$ grep –w <word> <filename>
Por ejemplo, para buscar la palabra exacta “do ” en el archivo Donuts.txt, el comando sería:
$ grep -w do Donuts.txt
Como puede ver, ahora solo imprime la línea que contiene la palabra exacta "do ”.
Líneas coincidentes que comienzan con una palabra en particular
Para imprimir líneas que comiencen con una palabra en particular, agregue "^ ” a tus órdenes.
$ grep ^<word> <filename>
Por ejemplo, el siguiente comando imprimirá todas las líneas que comienzan con “Th ”.
$ grep ^Th Donuts.txt
Líneas coincidentes que terminan con un patrón
Para imprimir líneas que terminen con un patrón en particular, agregue “$ ” a tus órdenes.
$ grep <word>$ <filename>
Por ejemplo, el siguiente comando imprimirá todas las líneas que terminen con “t ”.
$ grep t$ Donuts.txt
Líneas coincidentes que contienen ciertas letras
Si desea buscar líneas que tengan una o varias letras, use la siguiente sintaxis:
$ grep “[<letters>]” <filename>
Por ejemplo, el siguiente comando imprime todas las líneas que contienen cualquier letra de la "a" a la "f".
$ grep “[a-f]” Donuts.txt
Búsqueda recursiva
Para buscar todos los archivos en un directorio y subdirectorio para un patrón o palabra en particular, use:
$ grep -R <word> <path>
Por ejemplo, el siguiente comando mostrará una lista de todos los archivos que contienen la palabra "Hola" en el directorio Documentos. En el siguiente resultado, puede ver las rutas de los archivos junto con las palabras correspondientes.
$ grep -R “Hello” /home/maryam/Documents
Impresión de líneas específicas antes/después de las palabras coincidentes
De forma predeterminada, Grep imprime solo la línea que coincide con el patrón específico. Con -A opción en Grep, también puede incluir algunas líneas antes o después de las palabras coincidentes.
Líneas de impresión después del partido
Para imprimir las líneas que contienen las palabras coincidentes, incluida N número de líneas después de los partidos:
$ grep -A <N> <word> <filename>
Por ejemplo, el siguiente comando imprimirá la línea que contiene la palabra "infierno" junto con 1 línea después.
$ grep -A 1 hell Donuts.txt
Impresión de líneas antes del partido
Para imprimir las líneas que contienen las palabras coincidentes, incluida N número de líneas antes de los partidos:
$ grep -B <N> <word> <filename>
Por ejemplo, el siguiente comando imprimirá la línea que contiene la palabra "infierno" junto con 1 línea antes.
$ grep -B 1 hell Donuts.txt
Líneas de impresión antes y después del partido
Para imprimir las líneas que contienen las palabras coincidentes, incluida N número de líneas antes y después de los partidos:
$ grep -C <N> <word> <filename>
Por ejemplo, el siguiente comando imprimirá la línea que contiene la palabra "infierno" junto con 1 línea antes y después.
$ grep -C 1 hell Donuts.txt
Contar el número de coincidencias
Usando -c opción con grep, puede contar las líneas que coinciden con un patrón específico. Recuerde, solo coincidirá con el número de líneas, no con el número de palabras coincidentes.
$ grep -c <word> <filename>
Por ejemplo, el siguiente comando imprime el número de líneas que contiene la palabra "Donuts".
$ grep -c Donuts Donuts.txt
Tenga en cuenta que nuestro archivo "Donuts.txt" contiene 4 "Donuts", pero -c solo ha impreso el recuento como 3. Sucede porque cuenta el número de líneas en lugar del número de coincidencias.
Para obtener más información sobre grep, use el siguiente comando:
$ grep --help
o visite la página de manual usando el siguiente comando:
$ man grep
Esto lo llevará a la página del manual de Grep.
¡Eso es todo! En esta publicación, explicamos la sintaxis básica y el uso del comando grep en Linux. También revisamos algunas opciones de línea de comandos para ampliar su utilidad. Si conoce otros usos del comando Grep en Linux que nos hemos perdido, nos encantaría conocerlos en los comentarios a continuación.
Explore este artículo relacionado para descubrir cómo puede encontrar archivos y directorios en Linux.