/ / Regulärer Ausdruck mit ls - regex, ls, globbing

Verwendung regulärer Ausdrücke mit ls - regex, ls, globbing

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 № 1

Sie 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, sedusw.), 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