Ich versuche ein Bash-Skript zu automatisieren extrahieren Tear-Archive und meine sed Regex funktioniert nicht wie erwartet. Wenn ich das tue:sed pattern matching funktioniert nicht
archive=$1
directory=$(sed "s/.tar.bz2$//" <<< $archive)
echo "extracting $archive to $directory"
ich:
$ sh extract binutils-2.27.tar.bz2
extracting binutils-2.27.tar.bz2 to binutils-2.27
die als erwartet ist.
Aber wenn ich tue:
archive=$1
directory=$(sed "s/.tar.[a-z0-9]{2,3}$//" <<< $archive)
echo "extracting $archive to $directory"
das ist, was ich tun will (so wie jede Art von Archiv zu handhaben), würde ich erwarten, dass die gleiche Leistung zu erhalten, aber ich bin immer:
$ sh extract binutils-2.27.tar.bz2
extracting binutils-2.27.tar.bz2 to binutils-2.27.tar.bz2
Wie Sie sehen können, gilt die Regex nicht.
Ich habe meine Regex auf regex101.com getestet und es scheint richtig zu sein, aber es scheint nicht richtig im Bash-Skript zu funktionieren. Kann mir bitte jemand in die richtige Richtung weisen, was schief läuft?
Ich bin auf Mint 17.3.
Verwenden Sie einzelne Anführungszeichen für Skripte, es sei denn, Sie haben eine Spezifikation c BENÖTIGEN Sie dies nicht (z. um die Shell eine Variable erweitern zu lassen), entwische RE - Metazeichen, wenn sie wörtlich behandelt werden sollen (zB '.'), und zitiere deine Variablen (' echo "$ directory" '), es sei denn du hast spezielle NEEDs (zB globbing)) –