ubuntuusers.de

operator "|" in der bash (regex)

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Olmec

Avatar von Olmec

Anmeldungsdatum:
2. Februar 2007

Beiträge: 191

Wohnort: Tuxer Alpen / Österreich

Hey, ein logisches Problem:

Sagen wir ich habe die files von ab01 bis ab99 und möchte nur ab18 ab19 ab20 und ab21 mit einem "mv" Kommando verschieben.

als regex würde mir da

mv abc(1[8-9]|2[0-1]) folderX

einfallen. Die bash kommt mir dann mit "(" token unexpected. Wie leite ich regex in der bash ein? Kann sie das überhaupt so?

TheDarkRose

Avatar von TheDarkRose

Anmeldungsdatum:
28. Juli 2010

Beiträge: 3459

Wüsste nicht, das es regex in der Bash gibt. Aber ist gibt ne brace expansion, die reicht für deinen Fall. Ist sogar schöner, da brace expansions ranges unterstützen:

1
mv ab{18..21} folderX/

oder alternativ geschachtelt, was deiner Regex näher kommt, da jedes Komma ähnlich zum OR in der Regex ist:

1
mv ab{1{8..9},2{0..1}} folderX/

Nachlesen: http://wiki.bash-hackers.org/syntax/expansion/brace


Expansions kannst du ganz einfach vorher mit echo kontrollieren, ob dein gewünschtes ergebnis herauskommt, bevor du es wirklich anwendest. Achtung, je nach Expansion kann das ne ganz große Ausgabe werden ^^

1
echo ab{1{8..9},2{0..1}}

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Der Vollständigkeit halber: Die Bash würde auch noch extglob können, reguläre Ausdrücke sind das aber auch nicht.

Wichtig zu erwähnen bei Brace Expansions: Die matchen nicht, sondern generieren eine Liste. Sprich, jede Datei muss dann auch existieren, sonst gibt es Fehler/Warnungen.

Olmec

(Themenstarter)
Avatar von Olmec

Anmeldungsdatum:
2. Februar 2007

Beiträge: 191

Wohnort: Tuxer Alpen / Österreich

Okay, wieder was gelernt. Die brace expansions sind tatsächlich was ich wollte. extglob is auch einen Blick wert.

Merci

Antworten |