Script, problemas con grep y cadenas no nulas (SOLUCIONADO)

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: maiku, akodo

Responder
Avatar de Usuario
Misura
Forista Nuevo
Forista Nuevo
Mensajes: 6
Registrado: Jue Ago 23, 2012 8:47 pm

Script, problemas con grep y cadenas no nulas (SOLUCIONADO)

Mensaje por Misura »

Hola a tod@s!

tengo problemas al hace el siguiente script, que me urge bastante :o

Necesito encontrar en un directorio lleno de ficheros, el fichero con extensión .c o .cpp que sea el programa principal, pudiendo distinguirlo porque, en este caso, contendrá la secuencia ' main(' (con un espacio en blanco antes de la eme).

Para buscar los posibles ficheros candidatos con esa extensión ejecuto la orden:

candidatos=$(find . -maxdepth 1 -type f -name "*.c" -o -name "*.cpp" )




Ahora, entre ese listado de posibles ficheros que puedan el principal, lo recorro para ir haciendo un grep a cada uno de ellos para buscar si contiene la línea ' main('

for fich in $candidatos
do
contenido=$(grep -l ' main(' $fich)
if [ -n contenido ] ; then
echo "En este fichero encontre el main " $fich
fi
done


El problema me surge en que no me hace bien el test de "if [ -n contenido ] ya que no sale nulo, sino que a veces sale algún caracter de escape. Puede que un retorno de carro. Por lo que todos los ficheros, contengan o no la línea ' main(', entran dentro del if, mostrando el correspondiente echo. He probado a añadir una variable tras la línea de 'contenido' que guarde un $(echo -n $contenido) para que no coja el salto de línea al final, pero nada.

Por ello, no sé cómo distinguir si el fichero sobre el que se hace el grep es el que contiene el main o no lo contiene. :wall:

¿Podríais echarme una mano, por favor?
Millones de gracias!!!! :hi:
Última edición por Misura el Vie Ago 24, 2012 7:39 pm, editado 2 veces en total.

Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: Ayuda! Script, problemas con grep y cadenas no nulas

Mensaje por niky45 »

grep es perfectamente capaz de hacer la busqueda el solito. de hecho, su sintaxis normal, es esa: grep pattern file(s)

ahora, para que te muestre en que fichero esta la coincidencia, se que habia alguna opcion por ahi... dejame echarle un ojo al man, anda. :wink:
man grep escribió:-l, --files-with-matches
Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match. (-l
is specified by POSIX.)
diria de buscar algun workaround por lo de que se para en cuanto encuentra una coincidencia, pero supongo que solo tienes un main.

asi, la sintaxis seria:

Código: Seleccionar todo

cd /ruta/al/dir
grep -l -e" main(" *.{cpp,c}
pruebalo y nos cuentas, ok?? :wink:

por cierto, revisando tu script... :shock:
contenido=$(grep -l ' main(' $fich)
if [ -n "$contenido" ] ; then
echo "En este fichero encontre el main " $fich
fi

tendras que decirle que es una variable, no?? :wink: (y por cierto, es recomendable poner siempre las variables entre comillas. )

:)
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

Avatar de Usuario
Misura
Forista Nuevo
Forista Nuevo
Mensajes: 6
Registrado: Jue Ago 23, 2012 8:47 pm

Re: Ayuda! Script, problemas con grep y cadenas no nulas

Mensaje por Misura »

GRACIAS!! GRACIAS!! GRAAAACIAS!!! :yahoo:

me funciona perfectamente con tus indicaciones.

Gracias por la ayuda y por contestar tan increíblemente rápido!!

Saludos ^^

Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: Ayuda! Script, problemas con grep y cadenas no nulas

Mensaje por niky45 »

de nada. estamos para ayudar. :D sobre todo, si el user nos trae ya codigo pensado, y no espera que le hagamos la tarea del colegio... (no sabes la cantidad de gente que viene con "no se hacer esto!!"; y yo me digo "si tan solo lo intentaran...." :wink: )

PD: por cierto, con objeto de facilitar el uso del buscador, podrias editar el titulo (del primer post), y poner lo de [solucionado]?? y ya de paso, quitar eso de "ayuda", que segun el reglamento no esta permitido. :wink:
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje