Carmen Marcela Alegria C. escribió: > > > --- El vie 27-feb-09, Rodrigo Gallardo <rodr...@nul-unu.com> escribió: > >> De:: Rodrigo Gallardo <rodr...@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? > > lo...@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 > > lo...@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 > > lo...@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!
smime.p7s
Description: S/MIME Cryptographic Signature