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셸에서 수행하는 것보다 더 적합할 수 있습니다.

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

관련된:쉘 루프를 사용하여 텍스트를 처리하는 것이 왜 나쁜 습관으로 간주됩니까?

관련 정보