Die Frage wurde nach regulären Ausdrücken gestellt. Bash lsunterstützt hier also keine regulären Ausdrücke. Was es unterstützt, sind Dateinamenausdrücke ( Globbing ), eine Form von Platzhaltern. Reguläre Ausdrücke sind viel leistungsfähiger.
Wenn Sie wirklich reguläre Ausdrücke verwenden möchten, können Sie folgendermaßen vorgehen find -regex:
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt'
Find ist standardmäßig rekursiv, aber lsnicht. Um nur Dateien im aktuellen Verzeichnis zu finden, können Sie die Rekursion mit deaktivieren -maxdepth 1. Finden Sie Übereinstimmungen mit dem Dateinamen mit Pfad. Deshalb beginnen die Dateinamen mit, ./wenn Sie find in ausführen .. Der Regex beginnt damit umzugehen \./. Beachten Sie, dass es sich bei einem regulären Ausdruck .um ein Sonderzeichen handelt, das mit jedem Zeichen übereinstimmt. Hier wollen wir jedoch unbedingt einen Punkt. Deshalb schließen wir ihn mit einem Backslash. Wir machen dasselbe für den Punkt in .txt, da der reguläre Ausdruck sonst auch übereinstimmen würde Atxt. Die Ziffernklassen sind die gleichen wie beim Globbing, nur dass Sie ^stattdessen brauchen! zu invertieren der Zeichenklasse.
Wenn Sie die Ausgabe von erhalten möchten, lskönnen Sie -exec lswie folgt verwenden:
find . -maxdepth 1 -regex '\./.*[^0-9][0-9]\.txt' -exec ls -lah {} \;
findunterstützt ein paar verschiedene Regex-Geschmacksrichtungen. Sie können beispielsweise Folgendes angeben -regextype:
find . -maxdepth 1 -regextype egrep -regex '\./.*[^0-9][0-9]\.txt'
Mögliche Typen sind für mich: 'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic' , 'posix-egrep', 'posix-extended', 'posix-minimal-basic', 'sed' Sie können find -regextype helpherausfinden, was auf Ihrem System unterstützt wird.
shopt -s extglob.