grep
significa Búsqueda global de expresiones regulares e impresión . Es una herramienta de línea de comandos utilizada en los sistemas UNIX y Linux para buscar un patrón específico en un archivo o grupo de archivos.
grep
viene con muchas opciones que nos permiten realizar varias acciones relacionadas con la búsqueda en archivos. En este artículo, veremos cómo utilizar grep
las opciones disponibles, así como las expresiones regulares básicas para buscar archivos.
Cómo utilizar grep
Sin pasar ninguna opción, grep
se puede utilizar para buscar un patrón en un archivo o grupo de archivos. La sintaxis es:
grep ''
Tenga en cuenta que se requieren comillas simples o dobles alrededor del texto si es más de una palabra.
También puede utilizar el comodín (*) para seleccionar todos los archivos de un directorio.
El resultado de esto son las ocurrencias del patrón (por la línea que se encuentra) en el archivo (s). Si no hay coincidencia, no se imprimirá ninguna salida en el terminal.
Por ejemplo, digamos que tenemos los siguientes archivos (llamados grep.txt):
Hello, how are you I am grep Nice to meet you
El siguiente grep
comando buscará todas las apariciones de la palabra 'usted':
grep you grep.txt
El resultado de esto es:
Hello, how are you Nice to meet you
you
Se espera que tenga un color diferente al del resto del texto para identificar fácilmente lo que se buscó.
Pero grep
viene con más opciones que nos ayudan a lograr más durante una operación de búsqueda. Veamos nueve de ellos mientras los aplicamos al ejemplo anterior.
Opciones utilizadas con grep
1. -n
(--line-number) - enumera los números de línea
Esto imprime las coincidencias para el texto junto con los números de línea. Si observa el resultado que tenemos arriba, notará que no hay números de línea, solo coincidencias.
grep you grep.txt -n
Resultado:
1: Hello, how are you 3: Nice to meet you
2. -c
(--count): imprime el número de líneas de coincidencias
grep you grep.txt -c
Resultado:
2
Tenga en cuenta que si hubiera otro "usted" en la línea uno, la opción -c
todavía se imprimiría 2. Esto se debe a que se refiere al número de líneas donde aparecen las coincidencias, no al número de coincidencias.
3. -v
(--invert-match): imprime las líneas que no coinciden con el patrón especificado
grep you grep.txt -v -n
Resultado:
2. I am grep
¿Note que también usamos la opción -n
? Sí, puede aplicar varias opciones en un comando.
4. -i
(--ignore-case) - utilizado para la insensibilidad a mayúsculas y minúsculas
# command 1 grep You grep.txt # command 2 grep YoU grep.txt -i
Resultados:
# result 1 # no result # result 2 Hello, how are you Nice to meet you
5. -l
(--files-with-matches): imprime los nombres de los archivos que coinciden con un patrón
# command 1 grep you grep.txt -l # command 2 grep You grep.txt -i -l
Resultados:
# result 1 grep.txt # result 2 # all files in the current directory that matches # the text 'You' case insensitively
#### 6. `-w` (--word-regexp) - print matches of the whole word
De forma predeterminada, grep
coincide con cadenas que contienen el patrón especificado. Esto significa que grep yo grep.txt
imprimirá los mismos resultados que grep yo grep.txt
porque 'yo' se puede encontrar en usted. Del mismo modo, 'ou'.
Con la opción -w
, grep
asegura que las coincidencias sean exactamente el mismo patrón que el especificado. Ejemplo:
grep yo grep.txt -w
Resultado:
¡Sin resultados!
7. -o
(--only-matching) - imprime solo el patrón coincidente
De forma predeterminada, grep
imprime la línea donde se encuentra el patrón coincidente. Con la opción -o
, solo el patrón coincidente se imprime línea por línea. Ejemplo:
grep yo grep.txt -o
Resultado:
yo
8. -A
(--after-context) y -B
(--before-context) - imprime las líneas después y antes (respectivamente) del patrón coincidente
grep grep grep.txt -A 1 -B 1
Resultado:
Hello, how are you I am grep Nice to meet you
Este patrón emparejado está en la línea 2. -A 1
significa una línea después de la línea emparejada y -B 1
significa una línea antes de la línea emparejada.
También hay una -C
opción (--context) que es igual a -A
+ -B
. El valor pasado a -C
se usaría para -A
y -B
.
9. -R
(--dereference-recursive) - búsqueda recursiva
De forma predeterminada, grep
no se pueden buscar directorios. Si intenta hacerlo, obtendrá un error ("Es un directorio"). Con la opción -R
, es posible buscar archivos dentro de directorios y subdirectorios. Ejemplo:
grep you .
Resultado:
# 'you' matches in a folders # and files starting from the # current directory
Expresiones regulares para patrones
grep
también permite expresiones regulares básicas para especificar patrones. Dos de ellos son:
1. ^pattern
- inicio de una línea
Este patrón significa que grep
coincidirá con las cadenas cuyas líneas comienzan con la cadena especificada después ^
. Ejemplo:
grep ^I grep.txt -n
Resultado:
2: I
2. pattern$
- final de una línea
A diferencia de ^
, $
especifica patrones que coincidirán si la línea termina con la cadena anterior $
. Ejemplo:
grep you$ grep.txt
Resultado:
1: Hello, how are you 3: Nice to meet you
Envolver
grep
es una poderosa herramienta para buscar archivos en la terminal. Comprender cómo usarlo le brinda la posibilidad de encontrar archivos fácilmente a través del terminal.
Hay más opciones adjuntas a esta herramienta. Puedes encontrar con man grep
.