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 wie ed scheint ein Alias für posix-basic zu sein, sollte also mit POSIX BRE kompatibel sein (unterstützt jedoch einige ex Spannungen wie \+). ' ist nicht mit GNU sed kompatibel, wobei beispielsweise [\n] einer neuen Zeile entspricht der von POSIX geforderte Backslash oder n. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.