Buscar texto en archivos con grep

última modificación:

Hay veces que necesitamos encontrar todas las líneas de un archivo que contienen un texto determinado, por ejemplo para buscar un error concreto en los registros de Apache o para localizar dónde se usa una función en el código. Para eso existe grep.

Para buscar una cadena en un archivo:

grep "error" /var/log/apache2/error.log

Con -i la búsqueda ignora mayúsculas y minúsculas, y con -n muestra el número de línea:

grep -in "error" /var/log/apache2/error.log

Para buscar en todos los archivos de un directorio de forma recursiva usamos -r:

grep -r "nombre_funcion" /var/www/mi-proyecto/

grep se puede combinar con otros comandos mediante tuberías. Por ejemplo, para buscar procesos de Apache en la salida de ps:

ps aux | grep apache

O para buscar en las últimas entradas de un registro (ver Mostrar el contenido nuevo de varios archivos):

tail -100 /var/log/apache2/error.log | grep "404"

Si queremos mostrar las líneas que no contienen el patrón usamos -v. Por ejemplo, para filtrar registros de acceso eliminando las peticiones de imágenes:

grep -v "\.png\|\.jpg\|\.gif" /var/log/apache2/access.log