
Procurando um guia para otimizar correspondências de regexp no bash.
Eu tenho um script que percorre uma lista muito longa de URLs em busca de padrões. Atualmente parece um pouco com o fragmento abaixo. Existe um guia para otimizar esse tipo de correspondência?
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
Responder1
Conforme apontado nos comentários, algo como awk
pode ser mais adequado para isso do que tentar fazer isso no 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" }
Então:
$ awk -f script.awk inputfile
onde inputfile
é um arquivo contendo URLs, um por linha (por exemplo).
Relacionado:Por que usar um loop de shell para processar texto é considerado uma prática inadequada?