Optimierung von Bash-Globs

Optimierung von Bash-Globs

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, awkist 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 inputfilehandelt es sich um eine Datei mit URLs, beispielsweise eine pro Zeile.

Verwandt:Warum gilt die Verwendung einer Shell-Schleife zur Textverarbeitung als schlechte Praxis?

verwandte Informationen