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 -regex
austauschbar verwenden?)
Jede Hilfe dankbar.
bash
find
regular-expression
Lukas88
quelle
quelle
-iname
(und-name
) verwenden Globs , die diese Syntax nicht haben.Antworten:
Du könntest es versuchen
oder
quelle
Wenn Sie GNU find haben, können Sie einen anderen regulären Ausdruckstyp verwenden:
Laut GNU wird
find
standardmäßig eine neutrale Emacs-Syntax für reguläre Ausdrücke verwendet - Emacs unterstützt die\{from,to\}
Syntax, aber zumindest GNUfind
unterstützt sie nicht.Seltsamerweise enthält das Referenzhandbuch keinen Abschnitt über die
sed
Syntax regulärer Ausdrücke. Wer weiß also, welche Teile davon unterstützt werden?quelle
sed
likeed
scheint ein Alias für zu seinposix-basic
, sollte also mit POSIX BRE kompatibel sein (obwohl es einige Erweiterungen wie unterstützt\+
). Es ist nicht kompatibel mit GNU,sed
wo zum Beispiel[\n]
eine neue Zeile anstelle des Backslashs steht odern
von POSIX benötigt wird. Siehe auch-regextype posix-extended
für POSIX EREs (so.*myfile[0-9]{1,2}
), auch mit Erweiterungen wie\s
oder\<
-regextype egrep
können Sie die Backslashes anscheinend vermeiden.