otimização de bash globs

otimização de bash globs

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 awkpode 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?

informação relacionada