# Cómo buscar una cadena de texto dentro de archivos en Linux con grep

- Link: https://binariocero.com/linux/como-buscar-una-cadena-de-texto-dentro-de-archivos-en-linux-con-grep
- Published: 2026-09-05T09:41:17+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

Cuando administramos un servidor Linux es muy habitual necesitar localizar una determinada
cadena de texto dentro de los archivos del sistema. Por ejemplo, podemos necesitar
encontrar dónde está definida una configuración, localizar una dirección IP, buscar
una variable, comprobar dónde aparece una determinada palabra o localizar una referencia
dentro de archivos de configuración.

Para realizar este tipo de búsquedas, una de las herramientas fundamentales de Linux
es `**grep**`.

`grep` permite buscar patrones dentro del contenido de uno o varios archivos y mostrar
las líneas que contienen coincidencias.

## 1. Buscar una cadena dentro de un archivo

La forma más sencilla es:

    ```wp-block-code
    grep "cadena" archivo
    ```

Por ejemplo:

    ```wp-block-code
    grep "localhost" configuracion.conf
    ```

Si el archivo contiene:

    ```wp-block-code
    server=localhost
    database=localhost
    ```

`grep` mostrará las líneas que contienen la cadena buscada.

# 2. Buscar dentro de todos los archivos de una carpeta

Si queremos buscar una cadena dentro de todos los archivos de un directorio:

    ```wp-block-code
    grep -r "cadena" .
    ```

El punto (`.`) significa **el directorio actual**.

Por ejemplo:

    ```wp-block-code
    grep -r "localhost" .
    ```

Esto buscará `localhost` dentro de los archivos del directorio actual y también 
dentro de sus subdirectorios.

La opción `-r` significa `--recursive` y hace que `grep` recorra recursivamente 
los directorios.

# 3. Mostrar el número de línea

Para saber exactamente en qué línea aparece la cadena podemos utilizar `-n`:

    ```wp-block-code
    grep -rn "cadena" .
    ```

Por ejemplo:

    ```wp-block-code
    grep -rn "server.port" /etc
    ```

Podríamos obtener algo parecido a:

    ```wp-block-code
    /etc/app/config.conf:15:server.port=8080
    /etc/app/server.conf:32:server.port=9090
    ```

La salida indica:

    ```wp-block-code
    archivo:número_de_línea:contenido
    ```

Por tanto:

    ```wp-block-code
    /etc/app/config.conf:15:server.port=8080
    ```

significa que la coincidencia está en `/etc/app/config.conf`, línea 15.

# 4. Buscar sin distinguir mayúsculas y minúsculas

Por defecto, `grep` distingue entre mayúsculas y minúsculas.

Por ejemplo:

    ```wp-block-code
    grep -r "password" .
    ```

no necesariamente encontrará:

    ```wp-block-code
    Password
    PASSWORD
    PassWord
    ```

Para ignorar las diferencias entre mayúsculas y minúsculas utilizamos `-i`:

    ```wp-block-code
    grep -rni "password" .
    ```

# 5. Mostrar solamente los nombres de los archivos

En ocasiones no nos interesa saber qué línea contiene la cadena, sino simplemente**
qué archivos contienen la cadena**.

Para ello utilizamos `-l`:

    ```wp-block-code
    grep -rl "cadena" .
    ```

Ejemplo:

    ```wp-block-code
    grep -rl "server.port" /etc
    ```

Resultado:

    ```wp-block-code
    /etc/app/application.conf
    /etc/app/server.conf
    /etc/servicio/config.ini
    ```

Esta opción es especialmente útil cuando hay muchos resultados.

# 6. Buscar una cadena exacta

`grep` utiliza expresiones regulares por defecto. Si queremos buscar una cadena 
literalmente, podemos utilizar `-F`:

    ```wp-block-code
    grep -rFn "cadena.exacta" .
    ```

Por ejemplo:

    ```wp-block-code
    grep -rFn "192.168.1.100" /etc
    ```

Con `-F`, la cadena se interpreta como texto literal y no como una expresión regular.

# 7. Buscar solamente en determinados tipos de archivo

Podemos limitar la búsqueda mediante `--include`.

Por ejemplo, para buscar solamente dentro de archivos `.conf`:

    ```wp-block-code
    grep -rn --include="*.conf" "localhost" /etc
    ```

Para archivos `.txt`:

    ```wp-block-code
    grep -rn --include="*.txt" "palabra" /home
    ```

Para varios tipos de archivo:

    ```wp-block-code
    grep -rn \
      --include="*.conf" \
      --include="*.ini" \
      --include="*.cfg" \
      "localhost" /etc
    ```

`grep` permite utilizar `--include` para restringir la búsqueda a determinados nombres
de archivo.

# 8. Excluir determinados directorios

Cuando buscamos en un árbol de directorios grande, puede interesarnos evitar determinadas
carpetas.

Por ejemplo:

    ```wp-block-code
    grep -rn --exclude-dir=".git" "cadena" .
    ```

Podemos excluir varias:

    ```wp-block-code
    grep -rn \
      --exclude-dir=".git" \
      --exclude-dir="node_modules" \
      --exclude-dir="cache" \
      "cadena" .
    ```

La opción `--exclude-dir` permite excluir directorios de las búsquedas recursivas.

# 9. Buscar en todo el sistema Linux

Si no sabemos dónde se encuentra el archivo y queremos buscar en todo el sistema:

    ```wp-block-code
    sudo grep -Rni "cadena" /
    ```

Por ejemplo:

    ```wp-block-code
    sudo grep -Rni "192.168.1.100" /
    ```

Sin embargo, buscar directamente desde `/` puede generar muchos resultados y errores
de permisos.

Es preferible excluir directorios virtuales del sistema:

    ```wp-block-code
    sudo grep -Rni \
      --exclude-dir=proc \
      --exclude-dir=sys \
      --exclude-dir=dev \
      --exclude-dir=run \
      "cadena" /
    ```

También podemos utilizar `-s` para ocultar los mensajes de error:

    ```wp-block-code
    sudo grep -Rnis \
      --exclude-dir=proc \
      --exclude-dir=sys \
      --exclude-dir=dev \
      --exclude-dir=run \
      "cadena" /
    ```

La opción `-s` evita que `grep` muestre determinados mensajes de error, como problemas
al acceder a archivos.

# 10. El problema de que aparezca el historial

Un error bastante común es pensar que `grep` está buscando dentro de los archivos
cuando en realidad se está utilizando sobre la salida del comando `history`.

Por ejemplo:

    ```wp-block-code
    history | grep "cadena"
    ```

Este comando **NO busca dentro de los archivos**.

Lo que hace es buscar la cadena dentro de la salida del comando `history`, es decir,
dentro del historial de comandos ejecutados en la terminal.

Por ejemplo:

    ```wp-block-code
    history | grep ssh
    ```

puede devolver:

    ```wp-block-code
    125  ssh root@192.168.1.10
    134  ssh usuario@servidor
    145  history | grep ssh
    ```

Esto no tiene nada que ver con buscar `ssh` dentro del contenido de los archivos.

# 11. La diferencia fundamental

Hay que distinguir entre estas dos situaciones.

### Buscar en el historial

    ```wp-block-code
    history | grep "cadena"
    ```

Busca en:

    ```wp-block-code
    historial de comandos
    ```

### Buscar dentro de archivos

    ```wp-block-code
    grep -Rni "cadena" .
    ```

Busca en:

    ```wp-block-code
    contenido de los archivos
    ```

Esta diferencia es fundamental.

Si lo que queremos es encontrar una cadena **dentro de ficheros**, normalmente debemos
utilizar:

    ```wp-block-code
    grep -Rni "cadena" /ruta
    ```

# 12. Ejemplo práctico

Supongamos que tenemos esta estructura:

    ```wp-block-code
    /opt/servidor/
    ├── config/
    │   ├── server.conf
    │   └── database.conf
    ├── scripts/
    │   ├── backup.sh
    │   └── start.sh
    └── logs/
        └── servidor.log
    ```

Queremos localizar dónde aparece:

    ```wp-block-code
    192.168.1.50
    ```

Ejecutamos:

    ```wp-block-code
    grep -Rni "192.168.1.50" /opt/servidor
    ```

Podríamos obtener:

    ```wp-block-code
    /opt/servidor/config/server.conf:12:server_ip=192.168.1.50
    /opt/servidor/scripts/backup.sh:25:SERVER="192.168.1.50"
    /opt/servidor/logs/servidor.log:183:Connected to 192.168.1.50
    ```

Así sabemos exactamente:

 * qué archivo contiene la cadena;
 * en qué línea aparece;
 * y cuál es el contenido de esa línea.

# 13. Buscar solamente en archivos de configuración

Si sabemos que la cadena debe estar en archivos `.conf`:

    ```wp-block-code
    grep -Rni --include="*.conf" "192.168.1.50" /etc
    ```

También podemos buscar en `.conf`, `.ini` y `.cfg`:

    ```wp-block-code
    grep -Rni \
      --include="*.conf" \
      --include="*.ini" \
      --include="*.cfg" \
      "192.168.1.50" /etc
    ```

Esto reduce considerablemente el número de archivos que `grep` tiene que analizar.

# 14. Evitar archivos binarios

Cuando buscamos en una gran cantidad de archivos podemos encontrarnos con archivos
binarios.

Podemos utilizar `-I`:

    ```wp-block-code
    grep -rniI "cadena" /ruta
    ```

La opción `-I` hace que los archivos binarios sean tratados como si no contuvieran
coincidencias.

Una búsqueda bastante práctica para archivos de texto sería:

    ```wp-block-code
    grep -rniI "cadena" /ruta
    ```

# 15. Buscar una palabra completa

Si queremos encontrar solamente una palabra completa podemos utilizar `-w`.

Por ejemplo:

    ```wp-block-code
    grep -rnw "root" /etc
    ```

Esto busca `root` como palabra, evitando coincidencias como:

    ```wp-block-code
    rootuser
    myroot
    root_password
    ```

dependiendo de los límites de palabra reconocidos por `grep`.

# 16. Mostrar contexto alrededor de la coincidencia

En ocasiones no basta con ver una única línea.

Podemos mostrar líneas anteriores y posteriores.

Por ejemplo, tres líneas antes y después:

    ```wp-block-code
    grep -rn -C 3 "cadena" /ruta
    ```

También podemos utilizar:

    ```wp-block-code
    grep -rn -B 3 "cadena" /ruta
    ```

para mostrar tres líneas **antes**.

Y:

    ```wp-block-code
    grep -rn -A 3 "cadena" /ruta
    ```

para mostrar tres líneas **después**.

Esto resulta muy útil al analizar archivos de configuración.

# 17. Buscar expresiones más complejas

`grep` también permite utilizar expresiones regulares.

Por ejemplo:

    ```wp-block-code
    grep -rnE "192\.168\.1\.[0-9]+" /etc
    ```

La opción `-E` activa las expresiones regulares extendidas.

Esto permite realizar búsquedas más avanzadas que una simple cadena de texto.

# 18. La opción `-r` frente a `-R`

Aunque normalmente veremos:

    ```wp-block-code
    grep -r
    ```

también existe:

    ```wp-block-code
    grep -R
    ```

La diferencia importante está relacionada con los enlaces simbólicos.

`-r` realiza la búsqueda recursiva y no sigue los enlaces simbólicos encontrados
durante el recorrido.

`-R` realiza la búsqueda recursiva siguiendo los enlaces simbólicos.

Para la mayoría de búsquedas normales:

    ```wp-block-code
    grep -rn "cadena" /ruta
    ```

es suficiente.

# 19. Comando recomendado para el uso diario

Para la mayoría de situaciones en administración Linux, una de las combinaciones
más útiles es:

    ```wp-block-code
    grep -RniI "cadena" /ruta
    ```

Por ejemplo:

    ```wp-block-code
    grep -RniI "database" /etc
    ```

Significado:

    ```wp-block-code
    -R   búsqueda recursiva
    -n   mostrar número de línea
    -i   ignorar mayúsculas/minúsculas
    -I   ignorar archivos binarios
    ```

# 20. Si solo queremos saber qué archivos contienen la cadena

Utilizaremos:

    ```wp-block-code
    grep -RliI "cadena" /ruta
    ```

Por ejemplo:

    ```wp-block-code
    grep -RliI "database" /etc
    ```

Esto devuelve únicamente los archivos que contienen la cadena.

# 21. Resumen de los comandos más útiles

| Objetivo | Comando | 
| Buscar dentro de un archivo | `grep "texto" archivo` | 
| Buscar recursivamente | `grep -r "texto" .` | 
| Mostrar número de línea | `grep -rn "texto" .` | 
| Ignorar mayúsculas | `grep -rni "texto" .` | 
| Solo nombres de archivos | `grep -rl "texto" .` | 
| Ignorar binarios | `grep -rniI "texto" .` | 
| Buscar solo `.conf` | `grep -rn --include="*.conf" "texto" .` | 
| Excluir directorio | `grep -rn --exclude-dir=".git" "texto" .` | 
| Buscar palabra completa | `grep -rnw "texto" .` | 
| Buscar literalmente | `grep -rnF "texto" .` | 
| Buscar en todo `/` | `sudo grep -RniI "texto" /` | 
| Buscar en el historial | `history | grep "texto"` |

# Conclusión

Si lo que necesitamos es **buscar una cadena de texto dentro del contenido de todos
los archivos**, el comando fundamental que debemos recordar es:

    ```wp-block-code
    grep -RniI "cadena" /ruta
    ```

Por ejemplo:

    ```wp-block-code
    grep -RniI "192.168.1.100" /etc
    ```

Este comando recorrerá recursivamente `/etc`, buscará la cadena dentro de los archivos,
ignorará las diferencias entre mayúsculas y minúsculas, evitará mostrar archivos
binarios y mostrará el número de línea donde se encuentra la coincidencia.

Y hay que tener muy presente la diferencia:

    ```wp-block-code
    history | grep "cadena"
    ```

**busca en el historial de comandos**, mientras que:

    ```wp-block-code
    grep -RniI "cadena" /ruta
    ```

**busca dentro del contenido de los archivos**.

Para búsquedas habituales en servidores Linux, `grep` sigue siendo una de las herramientas
más importantes para localizar rápidamente configuraciones, parámetros, direcciones,
variables y cualquier otro texto almacenado dentro de los ficheros.
