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