Carmen Marcela Alegria C. escribió: > > > --- El vie 27-feb-09, Rodrigo Gallardo <rodrigo@nul-unu.com> escribió: > >> De:: Rodrigo Gallardo <rodrigo@nul-unu.com> >> Asunto: Re: [OT] Línea de comandos >> A: debian-user-spanish@lists.debian.org >> Fecha: viernes, 27 febrero, 2009, 9:41 am >> On Fri, Feb 27, 2009 at 10:55:59AM -0300, Pablo Jiménez >> wrote: >>> On Fri, Feb 27, 2009 at 03:52:15AM -0200, Mauro Lizaur >> wrote: >>>> On Fri, 27 Feb 2009, Olaf Reitmaier Veracierta >> wrote: >>>>> De acuerdo, >>>>> >>>>> 5 ineditos pero utiles... >>>>> >>>>> 5.- Buscar que archivos "*.htm" >> contienen las frase o palabra palabra >>>>> "body" en el directorio actual >>>>> >>>>> -type f -name *.htm`; do >> if [ `cat $a | grep "body" | wc >>>>> -l` -gt 1 ]; then echo $a; fi; done >>>>> >>>> pero no es mas facil asi?: >>>> >>>> grep body *.htm* -R|cut -d':' -f1|uniq >>> Te ahorras el uso de cut con el mismo grep: >>> >>> $ grep -ilR "body" *.htm* >>> >>> Y con find es aún más poderoso: >>> >>> $ find . -type f -iname "*.htm*" -exec grep >> -il "body" {} \; >> >> Pero así ejecutas un grep por archivo, lo cual es lento. >> Mejor: >> >> $ find . -type f -iname '*.htm*' -print0 | xargs >> -0 grep -il body >> >> El -print0 por si alguno de los nombres contiene espacios, >> bastante >> común en directorios en los que probablemente ha actuado >> un diseñador >> con sus herramientas de windows. >> > > Esta bien interesante el tema, a mi me gusta mucho el poder de la linea de comando ;) > > Esta es mi aportacion: > > > 1) for a in `find . -type f -name "*.htm*"`; do if [ `cat $a | grep "body" | wc -l` -gt 1 ]; then echo $a; fi; done > > funciona, pero creo que esta mal hecho en algunos puntos; por ejemplo, el cat es innecesario, ya que el grep usa como argumentos el patron y file's. > > > grep -i "body" $a es mejor que hacer cat $a | grep "body" eso debido a que no usas un | y asi te ahorras un proceso > > despues en el if creo que es bueno hacer la comparacion, pero no entiendo porque tiene que ser el operador 'gt 1' porque eso ya estaria dando algo que me parece erroneo. Es decir tengo un archivo con 2 lineas body, no lo imprime, porque? > > local@debian:~/Desktop$ for a in `find . -type f -name "*.htm*"`; do if [ `cat $a | grep "body" | wc -l` -gt 1 ]; then echo $a; fi; done > ./SAN/Curso-SAN/dsm_sim/deploy/index.html > ./SAN/Curso-SAN/dsm_sim/deploy/start.html > ./SAN/Curso-SAN/dsm_sim/starter_page.html > ./Desktop.html > > local@debian:~/Desktop$ find . -type f -iname '*.htm*' -print0 | xargs -0 grep -il body > ./maraha_nessus/index.html > ./maraha_nessus/172_16_29_227/index.html > ./SAN/Curso-SAN/dsm_sim/deploy/index.html > ./SAN/Curso-SAN/dsm_sim/deploy/start.html > ./SAN/Curso-SAN/dsm_sim/deploy/content/assessment/index.html > ./SAN/Curso-SAN/dsm_sim/starter_page.html > ./Desktop.html > ./EULA/EULA-ja_JP.html > ./EULA/EULA-en_US.html > > local@debian:~/Desktop$ grep -i "body" ./EULA/EULA-ja_JP.html > <BODY LANG="ja-JP" DIR="LTR"> > </BODY> > > > 2) grep -ilR "body" *.htm* > > De este creo que el real problema es que si es recursivo pero no tanto como el find > > 3) find . -type f -iname '*.htm*' -print0 | xargs -0 grep -il body es bueno, pero es realmente necesario que se haga otro proceso por el | para hacerle el grep? no seria mejor hacer: > > find . -type f -iname '*.htm*' -print0 -exec grep -il body {} \; > > > Saludos, > > Marcela Alegria > > > > __________________________________________________ > Correo Yahoo! > Espacio para todos tus mensajes, antivirus y antispam ¡gratis! > Regístrate ya - http://correo.yahoo.com.mx/ > > El 3 es buenísimo, en efecto. De las dos maneras es un gran rastreador, pero con el "pipe" me va más rápido que con el 'exec'. A mí de todas formas es que me encanta el encadenamiento de procesos. Qué bien, cuántas aportaciones!
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature