
尋找在 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
可能比嘗試在 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" }
然後:
$ awk -f script.awk inputfile
其中inputfile
是包含 URL 的文件,每行一個(例如)。