
bash で正規表現の一致を最適化するためのガイドを探しています。
非常に長い URL リストをループしてパターンを探すスクリプトがあります。現在、以下のフラグメントのように見えます。このような一致を最適化するためのガイドはありますか?
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
答え1
コメントで指摘されているように、awk
シェルで実行しようとするよりも、次のような方法の方が適している可能性があります。
/\/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" }
それから:
$ awk -f script.awk inputfile
ここでinputfile
、URL が 1 行に 1 つずつ含まれているファイルです (例)。