find Befehl mit Regex Quantifier zB {1,2}

13

Ich habe versucht, eine Suchbefehlszeichenfolge zu erstellen, die alle Dateien findet, die mit einer Zahl von 1 bis 99 enden, aber alle anderen ausschließt.

Ich möchte zB meineDatei1 , meineDatei99, aber nicht meineDatei456 und nicht meineDateisicherung finden

Der Regex, an den ich denke, ist, myfile[1-9]{1,2}aber ich kann ihn nicht dazu bringen, mit find zu arbeiten.

find . -regex '.*myfile[0-9]{1,2}' ODER find . -iname 'myfile[0-9]{1,2}'

Soweit ich weiß {1,2}, funktioniert der Teil nicht.

(Übrigens können Sie -name -regexaustauschbar verwenden?)

Jede Hilfe dankbar.

Lukas88
quelle
1
-iname(und -name) verwenden Globs , die diese Syntax nicht haben.
07.03.13

Antworten:

10

Du könntest es versuchen

find . -regex '.*myfile[0-9][0-9]?'

oder

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
l0b0
quelle
Danke - die erste Zeile funktioniert für mich. Ich hatte es mit -iname versucht, aber ich glaube nicht, dass es die Syntax unterstützt, oder ich mache etwas falsch.
Lukas88
17

Wenn Sie GNU find haben, können Sie einen anderen regulären Ausdruckstyp verwenden:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

Laut GNU wird findstandardmäßig eine neutrale Emacs-Syntax für reguläre Ausdrücke verwendet - Emacs unterstützt die \{from,to\}Syntax, aber zumindest GNU findunterstützt sie nicht.

Seltsamerweise enthält das Referenzhandbuch keinen Abschnitt über die sedSyntax regulärer Ausdrücke. Wer weiß also, welche Teile davon unterstützt werden?

l0b0
quelle
1
sedlike edscheint ein Alias ​​für zu sein posix-basic, sollte also mit POSIX BRE kompatibel sein (obwohl es einige Erweiterungen wie unterstützt \+). Es ist nicht kompatibel mit GNU, sedwo zum Beispiel [\n]eine neue Zeile anstelle des Backslashs steht oder nvon POSIX benötigt wird. Siehe auch -regextype posix-extendedfür POSIX EREs (so .*myfile[0-9]{1,2}), auch mit Erweiterungen wie \soder\<
Stéphane Chazelas
Ich wusste nie über -regextype. Wenn Sie es verwenden, -regextype egrepkönnen Sie die Backslashes anscheinend vermeiden.
Sridhar Sarnobat