bash glob 的優化

bash glob 的優化

尋找在 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 的文件,每行一個(例如)。

有關的:為什麼使用 shell 循環處理文字被認為是不好的做法?

相關內容