grep busca texto dentro de archivos y es, junto con find, uno de los comandos que más vas a usar en Linux/macOS para encontrar rápidamente dónde aparece una palabra, un error en un log, o una línea con cierto patrón — sin tener que abrir cada archivo a mano.
Sintaxis básica
grep [opciones] 'texto' donde_buscar
Ejemplos:
grep -F 'i find a think' read.txt
grep --color -F 'i find a think' read.txt
grep -H -F 'i find a think' *.txt
grep -w -F 'development' *.sh
Tabla de opciones
| Opción | Descripción |
|---|---|
-w |
busca una palabra completa |
--color |
resalta en color la palabra encontrada |
-h |
oculta el nombre del archivo al mostrar resultados |
-n |
muestra el número de línea donde se encontró la palabra o texto |
-v |
muestra las líneas donde NO se encuentra la palabra o texto |
-i |
no distingue entre mayúsculas y minúsculas |
-o |
muestra solo la parte de la línea que coincide con la búsqueda |
-x |
solo coincide si la línea completa es igual al patrón |
-r |
busca de forma recursiva en todos los archivos de un directorio |
-c |
cuenta las líneas que contienen la palabra o texto |
-F |
interpreta el patrón como texto literal (no como expresión regular) |
-E |
interpreta el patrón como una expresión regular extendida |
-H |
muestra el nombre del archivo |
-R |
busca de forma recursiva en todos los archivos de un directorio |
-A número |
muestra también la cantidad de líneas indicada después de la coincidencia |
-B número |
muestra también la cantidad de líneas indicada antes de la coincidencia |
-C número |
muestra las líneas indicadas antes y después de la coincidencia |
Estas opciones se pueden combinar: por ejemplo, grep -rni busca de forma recursiva, muestra el número de línea y no distingue mayúsculas de minúsculas — una combinación muy común para buscar algo en todo un proyecto sin estar seguro de cómo quedó escrito.
Ejemplo con expresión regular
Con -E (o usando egrep), grep interpreta el patrón como una expresión regular extendida. Esto sirve, por ejemplo, para encontrar cualquier dirección IP dentro de /etc/hosts, sin saber de antemano cuál es:
grep -E --color '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts
# -o muestra solo la parte que coincide, no la línea completa
grep -E --color -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/hosts