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이 포함된 파일은 어디에 있습니까?