En los sistemas de la familia Unix, típicamente utilizamos la herramienta find para buscar archivos por nombre, por fecha de modificación, o tipo, tamaño, etc. Sin embargo puede ser necesario buscar archivos por contenido. Por ejemplo, buscar archivos que incluyan cierta palabra clave dentro de su texto. A tal fin es posible recurrir a grep para realizar búsquedas de texto en archivos (lo que se conoce como full-text search).

Por supuesto que recurrir a grep para ejecutar búsquedas full-text no es la opción más eficiente, sino que se debe recurrir a motores de búsqueda especializados como Apache Solr o la pila Elasticsearch. Sin embargo resulta útil para buscar archivos dentro de un conjunto reducido de datos, o en un sistema local.

La opción -i permite ignorar mayúsculas y minúsculas, y la opción -l hace que sólo se muestren los nombres de archivos que incluyen la cadena a buscar en la salida de grep.

Veamos un ejemplo: deseo buscar todos los archivos con extensión ".html" en el directorio actual que incluyen la palabra "grafana" o cualquier variante que incluya mayúsculas ("Grafana", "graFANa", etc.):

emi@hal9000:~/linuxito.com % grep -l -i 'grafana' *.html
apache-dontlog.html
collectd-apache.html
collectd-glassfish.html
collectd-iptables.html
collectd-mysql.html
collectd-postgres.html
collectd.html
compilar-collectd-centos.html
dpkg-upgrade.html
grafana-collectd.html
grafana-counters.html
grafana-dashboard.html
grafana-nginx-frontend.html
grafana-piechart.html
grafana-postgres.html
grafana-smtp-users.html
grafana.html
influxdb-auth.html
informix-influxdb-grafana.html
nginx-grafana-influxdb-collectd.html
postgres-user-password-reset.html

Para los SysAdmins resulta de gran ayuda a la hora de buscar en archivos de configuración, por ejemplo si quisiera encontrar todos los archivos de configuración que incluyen el nombre de dominio "linuxito.com":

root@webserver:~# grep -ri 'linuxito.com' /etc
/etc/exim4/update-exim4.conf.conf:dc_smarthost='smtp.linuxito.com'
/etc/exim4/update-exim4.conf.conf:dc_smarthost='smtp.linuxito.com'
/etc/exim4/update-exim4.conf.conf:dc_readhost='webserver.linuxito.com'
/etc/mailname:webserver.linuxito.com
/etc/logwatch/conf/logwatch.conf:MailTo = st@linuxito.com
/etc/hosts:192.168.47.153       webserver.linuxito.com webserver
/etc/aliases:root: admin@linuxito.com
/etc/default/aide:MAILTO=admin@linuxito.com
/etc/resolv.conf:search linuxito.com
/etc/apache2/sites-available/000-default.conf:  ServerAdmin admin@linuxito.com
/etc/apache2/sites-available/default-ssl.conf:          ServerAdmin admin@linuxito.com
/etc/network/interfaces:        dns-search linuxito.com

La opción -r o -R permiten buscar recursivamente. La diferencia entre ambas es que -R sigue los enlaces simbólicos y -r no.

Por otro lado, cuando no se utiliza la opción -l, junto con cada aparición de la cadena muestra el nombre del archivo junto con el contenido de la línea donde aparece (separados por dos puntos :).

Referencias

  • man grep


Tal vez pueda interesarte


Compartí este artículo