
Suche nach einer Anleitung zur Optimierung von Regexp-Übereinstimmungen in Bash.
Ich habe ein Skript, das eine sehr lange Liste von URLs durchläuft und nach Mustern sucht. Momentan sieht es ungefähr so aus wie das folgende Fragment. Gibt es eine Anleitung zur Optimierung dieser Art von Übereinstimmungen?
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
Antwort1
Wie in den Kommentaren angemerkt, awk
ist hierfür möglicherweise etwas wie das Folgende besser geeignet als der Versuch, es in der Shell auszuführen:
/\/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" }
Dann:
$ awk -f script.awk inputfile
Dabei inputfile
handelt es sich um eine Datei mit URLs, beispielsweise eine pro Zeile.
Verwandt:Warum gilt die Verwendung einer Shell-Schleife zur Textverarbeitung als schlechte Praxis?