Ich habe versucht, eine Suchbefehlszeichenfolge zu erstellen, die alle Dateien findet, die mit der Nummer 1-99 enden, aber alle anderen ausschließt
z Ich möchte myfile1 myfile99 finden, aber nicht myfile456 und nicht myfilebackup
Der reguläre Ausdruck, an den ich denke, ist myfile[1-9]{1,2}
, aber ich kann dies nicht mit find zum Laufen bringen.
find . -regex ".*myfile[0-9]{1,2}"
ODER find . -iname "myfile[0-9]{1,2}"
Soweit ich sehen kann, funktioniert der Teil {1,2}
nicht.
(übrigens) Können Sie -name -regex
austauschbar verwenden?)
Jede Hilfe wird geschätzt.
Kommentare
-
-iname
(und-name
) verwenden globs , die dies tun Diese Syntax ist nicht vorhanden.
Antwort
Sie können versuchen,
find . -regex ".*myfile[0-9][0-9]?"
oder
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Kommentare
- Danke – die erste Zeile ist arbeite ich ng für mich. Ich hatte dies mit -iname versucht, aber ich glaube nicht, dass es die Syntax unterstützt, oder ich ' mache etwas falsch.
Antwort
Wenn Sie GNU gefunden haben, können Sie einen anderen Typ für reguläre Ausdrücke verwenden:
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
Laut GNU find
wird ein kastriert Emacs-Syntax für reguläre Ausdrücke standardmäßig – Emacs unterstützt die \{from,to\}
-Syntax, jedoch mindestens GNU find
unterstützt es nicht.
Seltsamerweise enthält das Referenzhandbuch keinen Abschnitt über die sed
-Syntax für reguläre Ausdrücke. Wer weiß also, welche Teile davon? werden unterstützt.
Kommentare
-
sed
wieed
scheint ein Alias fürposix-basic
zu sein, sollte also mit POSIX BRE kompatibel sein (unterstützt jedoch einige ex Spannungen wie\+
). ' ist nicht mit GNUsed
kompatibel, wobei beispielsweise[\n]
einer neuen Zeile entspricht der von POSIX geforderte Backslash odern
. Siehe auch-regextype posix-extended
für POSIX EREs (also.*myfile[0-9]{1,2}
), auch mit Erweiterungen wie\s
oder\<
- Ich wusste nie über -regextype Bescheid. Wenn Sie
-regextype egrep
verwenden, können Sie anscheinend die Backslashes vermeiden.