оптимизация bash globs

оптимизация bash globs

Ищу руководство по оптимизации совпадений регулярных выражений в 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-адреса, по одному в строке (например).

Связанный:Почему использование цикла оболочки для обработки текста считается плохой практикой?

Связанный контент