optimización de bash globs

optimización de bash globs

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 awkpuede 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 inputfilehay 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?

información relacionada