Was ist der Platzhalter, der ein oder zwei Zeichen angibt?


7

Gibt es eine einfachere Möglichkeit zu schreiben : wc -l foo?.txt foo??.txt?

Da ich in meinem Fall (höchstens) zweistellige Zahlen habe, habe ich versucht, die Bereichsspezifikation zu verwenden, wc -l foo[1-99].txtaber dies ergab nur Ergebnisse zwischen 1 und 9 (anstelle von 99). Aber das ist ein (nicht funktionierender) Hack, und ich brauche wirklich so etwas wc -l foo[?,??].txt.

Antworten:


6

Wenn Sie zwei oder mehr Auswahlmöglichkeiten haben, verwenden Sie die Klammererweiterung :

foo{?,??}.txt

Oder genauer gesagt:

foo{[0-9],[0-9][0-9]}.txt

Beispiel

Betrachten wir ein Verzeichnis mit diesen drei Dateien:

$ ls foo*txt
foo111.txt  foo11.txt  foo1.txt

Beobachten:

$ echo foo{?,??}.txt
foo1.txt foo11.txt

Und:

$ echo foo{[0-9],[0-9][0-9]}.txt
foo1.txt foo11.txt

Oder genauer:

$ echo foo{,[0-9]}[0-9].txt
foo1.txt foo111.txt

Er will aber nicht 0;)
Rinzwind

Vielen Dank. Sind diese Informationen hier (siehe Platzhalter / Bereich) dann falsch?
Matsmath

@Matsmath Ich habe gerade das Beispiel aus dieser Dokumentation getestet und es schlägt für mich fehl. Der Bereich [2-23]bedeutet eines der Zeichen 2 bis 2 oder das Zeichen 3. Die Dokumentation sieht also falsch aus.
John1024

@ John1024 nein du brauchst dasshopt -s extglob
Rinzwind

Funktioniert zuletzt {,[0-9]}[0-9]auch mit weniger Eingabe.
Random832

4

Mit der erweiterten glob ( extglob) -Syntax von bash können Sie foo@(?|??)z

wc -l foo@(?|??).txt

Die extglobOption sollte in aktuellen Ubuntu-Versionen standardmäßig in der interaktiven Shell aktiviert sein. Andernfalls können Sie sie mit aktivieren

shopt -s extglob
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.