grep
significa Globally Search For Regular Expression and Print out (Búsqueda global de expresiones regulares). Es una herramienta de línea de comando usada en sistemas Linux y Unix para buscar un patrón específico en un archivo o grupo de archivos.
grep
tiene muchas opciones que permiten realizar varias acciones relacionadas con la búsqueda en archivos. En este artículo, observaremos como usar el comando grep
con sus opciones disponibles tanto como expresiones regulares básicas para buscar archivos.
Cómo usar grep
Sin el paso de ninguna opción, grep
puede ser usado para buscar un patrón en un archivo o grupo de archivos. La sintaxis es:
grep '<texto-buscado>' <archivo/archivos>
Tenga en cuenta que las comillas simples o dobles son requeridas alrededor del texto si es más de una palabra.
Tú puedes además usar el comodín (*) para seleccionar todos los archivos en un directorio.
El resultado de esto son las ocurrencias del patrón (por la línea en la que se encuentra) en los archivos. Si no existe una coincidencia, no se imprimirá ninguna salida en la terminal.
Por ejemplo, supongamos que tenemos los siguientes archivos (llamados grep.txt):
Hello, how are you
I am grep
Nice to meet you
El siguiente comando grep buscará todas las ocurrencias de la palabra "you":
grep you grep.txt
El resultado será:
Hello, how are you
Nice to meet you
you
se espera que tenga un color diferente al del otro texto para identificar fácilmente lo que se buscó.
Pero grep
viene con más opciones que nos ayudan a lograr más durante la operación de búsqueda. Veamos nueve de ellos mientras los aplicamos al ejemplo anterior.
Opciones usadas con grep
1. -n
(--line-number) - enumera los números de línea
Imprime las coincidencias de un texto junto con los números de línea. Si observas el resultado anterior, notarás que no se encuentran los números de líneas, solo las 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 si existiera otro "you" en la línea uno, la opción -c
aún imprimiría 2. Esto porque está relacionada con el número de líneas donde aparecen las coincidencias, no la cantidad 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
Notaste que nosotros usamos también la opción -n
? Si, es posible usar múltiples opciones en un solo comando.
4. -i
(--ignore-case) - Utilizado para la distinción de mayúsculas y minúsculas
# comando 1
grep You grep.txt
# comando 2
grep YoU grep.txt -i
Resultado:
# resultado 1
# no hay resultados
# resultado 2
Hello, how are you
Nice to meet you
5. -l
(--files-with-matches) - imprimir nombres de archivos que coincidan con un patrón
# comando 1
grep you grep.txt -l
# comando 2
grep You grep.txt -i -l
Resultado:
# resultado 1
grep.txt
# resultado 2
# todos los archivos en el directorio actual que coincidan
# el texto 'You' sea mayúscula o minúscula
#### 6. `-w` (--word-regexp) - imprime coincidencias de toda la palabra
Por defecto, 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' puede ser encontrado en 'you'. Similarmente 'ou'.
Con la opción -w
, grep
se asegura que las coincidencias sean exactamente el mismo patrón especificado, Ejemplo:
grep yo grep.txt -w
Resultado:
Sin resultados!
7. -o
(--only-matching) - imprimir solo el patrón coincidente
Por defecto, grep
imprime la línea donde se encuentra el patrón que coincide. Con la opción -o
, solo los patrones que coincidan son impresos línea por línea. Ejemplo:
grep yo grep.txt -o
Resultado:
yo
8. -A
(--after-context) y -B
(--before-context) - imprimir 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
Esta coincidencia de patrón se encuentra en la línea 2. -A 1
significa una línea después de la línea que coincide y -B 1
significa una línea antes de la línea que coincide.
Además existe -C
(--context) opción el cual es igual a -A
+ -B
. El valor pasado a -C se usaría para -A y -B.
9. -R
(--dereference-recursive) - búsqueda recursiva
Por defecto, grep
no puede buscar directorios. Si tú intentas hacerlo, obtendrás un error ("Es un directorio"). Con la opción -R
, la búsqueda de archivos entre directorios y subdirectorios se vuelve posible. Ejemplo:
grep you .
Resultado:
# 'you' coincide en carpetas
# y archivos a partir del
# directorio actual
Expresiones regulares para patrones
grep
también permite especificar patrones con expresiones regulares básicas. Dos de ellas son:
1. ^pattern
- Inicio de línea
Este patrón significa que grep
solo coincide con cadenas cuyas líneas empiecen con la cadena especificada después ^
. Ejemplo:
grep ^I grep.txt -n
Resultado:
2: I
2. pattern$
- fin de la línea
En contraste con ^
, $
especifica patrones que coincidirán si la línea termina con la cadena antes $
. Ejemplo:
grep you$ grep.txt
Resultado:
1: Hello, how are you
3: Nice to meet you
Resumen
grep
es una herramienta poderosa para la búsqueda de archivos en la terminal.
Entender como usarlo te brinda la habilidad de encontrar fácilmente archivos por medio de la terminal.
Existen más opciones relacionadas con esta herramienta. Puedes encontrarlas con el comando man grep
.
Traducido del artículo de - Dillion Megida - Grep Command Tutorial – How to Search for a File in Linux and Unix with Recursive Find