Buscar aquí

30 octubre 2013

usar el punto . en búsquedas con grep


Grep es una gran herramienta para buscar, pero usar un punto . dentro del texto, lo torna problemático, pues lo considera como un reemplazo para cualquier carácter y si queremos buscar todos los archivos o palabras en un archivo donde hay un listado de archivos y se busca una extensión o tipo de archivos en particular, si usamos:

find /home/katador > archivosenhome

y ahora quiero buscar todos los archivos con extensión java dentro de archivosenhome... si uso:

grep .java archivosenhome

va a mostrar un listado gigantesco donde txt no necesariamente es la extensión, sino dentro del nombre...

/home/arturo/eclipsework/mytracker/src/com/example/mytracker/MainActivity.java
/home/arturo/eclipsework/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt
/home/arturo/.eclipse/org.eclipse.platform_4.2.0_793567567/configuration/org.eclipse.osgi/bundles/450/1/.cp/images/topiclabel/ov_javadev48.gif

Como ven... muestra todo tipo de cosas... ahora si yo quiero sólo, pero sólo los archivos .java ejecuto:

grep "\.java" archivosenhome

las "" indican que sea ese  texto y el \ es para "escapar" el punto e indicar que es un caracter más, no para que lo use como reemplazante.  OJO que con esto mostrará todas las líneas que terminan con .java

Finalmente, si quiero buscar un texto que está en cualquier parte incluyendo el punto, se debe:

grep "\."texto archivosenhome

con esto, mostrará todas las líneas que tienen .texto en cualquier lugar.

Otra opción es utilizar la opción -F en grep, y el comportamiento es igual que la segunda opción, sería usar un:

grep -F .texto archivosenhome 

Esto también fue probado en HPUX y funciona igual que lo descrito.


No hay comentarios.:

Publicar un comentario