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