
Buscando una guía para optimizar las coincidencias de expresiones regulares en bash.
Tengo un script que recorre una lista muy larga de URL en busca de patrones. Actualmente se parece un poco al fragmento siguiente. ¿Existe una guía para optimizar este tipo de partidos?
if [[ ${url} == */oai/request ]]
then
echo first option
elif [[ ${url} =~ .*/index.php/[^/]+/journal=.* ]]
then
echo second option
elif [[ ${url} =~ .*/[Ee][Tt][dD]-[Dd][Bb]/.* ]]
then
echo third option
elif [[ ${url} =~ .*/handle/[0-9]+/[0-9].* || ${url} =~ .*/browse.* ]]
then
echo fourth option
else
echo no-match option
fi
Respuesta1
Como se señaló en los comentarios, algo como awk
puede ser más adecuado para esto que intentar hacerlo en el shell:
/\/oai\/request/ { print "first option" ; next }
/\/index\.php\/[^/]+\/journal=/ { print "second option"; next }
/\/[Ee][Tt][dD]-[Dd][Bb]\// { print "third option" ; next }
/\/handle\/[0-9]+\/[0-9]/ || /\/browse/ { print "fourth option"; next }
{ print "no match" }
Entonces:
$ awk -f script.awk inputfile
donde inputfile
hay un archivo que contiene URL, una por línea (por ejemplo).
Relacionado:¿Por qué se considera una mala práctica utilizar un bucle de shell para procesar texto?