grep, only show names to match

Hoy os voy a dejar aquí constancia de un pequeño truco de grep que sirve para facilitar la vida enormemente si tienes que hacer algún script o tienes que sacar un listado de ficheros. El caso es, cómo saber en qué ficheros de un directorio hay la ocurrencia de una palabra. Pues bien, para eso empleamos grep con las opciones -r (para que sea recursivo) y -i (para que no se fije en las mayúsculas/minúsculas). En un ejemplo práctico veremos que queda tal que así,
shell> grep -ri eth2 /etc
/etc/network/interfaces:auto eth2
/etc/network/interfaces:iface eth2 inet dhcp
/etc/network/run/ifstate:eth2=eth2
/etc/udev/rules.d/70-persistent-net.rules:SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:4c:66:98:20", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
En mi caso, eth2, la palabra buscada está en esos ficheros y en esas líneas. Sin embargo si esto es con una ocurrencia que está en muchas líneas y realmente sólo nos interesa saber los ficheros, pero no las líneas, tener que filtrar esta salida con sed o con awk, podría ser más complejo. Para ello, podemos usar la opción -l, que sumadas a las ya anteriormente comentadas nos da esta salida más limpia.
shell> grep -ril eth2 /etc
/etc/network/interfaces
/etc/network/run/ifstate
/etc/udev/rules.d/70-persistent-net.rules


No hay comentarios :

Publicar un comentario

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios