Ich versuche, ER zu benutzen (Erweiterte reguläre Ausdrücke) mit ls
mögen ls .+..+
.
Ich versuche, alle Dateien zu drucken, die eine Erweiterung enthalten (Ich weiß, ich hätte es benutzen können ls *.*
, aber ich wollte versuchen, ER) zu verwenden.
Wenn ich diesen Code ausführe, erhalte ich diesen Fehler: ls: .+..+: No such file or directory
.
Antworten:
64 für die Antwort № 1Sie verwechseln den regulären Ausdruck mit Shell Globbing. Wenn Sie einen regulären Ausdruck verwenden möchten, um Dateinamen zu vergleichen, könnten Sie Folgendes tun:
$ ls | egrep ".+..+"
4 für die Antwort № 2
Sie sagen nicht, welche Shell Sie verwenden, aber sie unterstützen normalerweise keine regulären Ausdrücke, obwohl es gemeinsame * nix CLI-Tools gibt (grep
, sed
usw.), die das tun.
Was Shells unterstützen, ist globbing, die einige ähnliche Zeichen verwendet (zB *), aber nicht dasselbe ist.
Neuere Versionen von bash haben einen regulären Ausdruck, =~
:
for x in `ls`; do
if [[ $x =~ .+..* ]]; then
echo $x;
fi;
done