otimização de bash globs

2

Procurando por um guia para otimizar correspondências de regexp no bash.

Eu tenho um script que faz um loop em uma lista muito longa de URLs procurando padrões. Atualmente, parece um pouco com o fragmento abaixo. Existe um guia para otimizar esses tipos de jogos?

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
    
por user2085362 05.01.2015 / 10:38

1 resposta

0

Como 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

em que inputfile é um arquivo que contém URLs, um por linha (por exemplo).

Relacionados: Por que está usando um loop de shell para processar texto considerado uma prática ruim?

    
por 06.09.2017 / 22:02