Ich versuche, ER (Extended Regular Expressions) mit ls
wie ls .+\..+
Zu verwenden.
Ich versuche, alle Dateien zu drucken, die eine Erweiterung enthalten (ich weiß, ich hätte ls *.*
Verwenden können, aber ich wollte versuchen, ER zu verwenden).
Wenn ich diesen Code ausführe, wird der folgende Fehler angezeigt: ls: .+..+: No such file or directory
.
Sie verwechseln regulären Ausdruck mit Shell globbing . Wenn Sie reguläre Ausdrücke verwenden möchten, um Dateinamen abzugleichen, können Sie Folgendes tun:
$ ls | egrep '.+\..+'
Sie sagen nicht, welche Shell Sie verwenden, aber sie unterstützen im Allgemeinen keine regulären Ausdrücke, obwohl es gängige * nix-CLI-Tools (grep
, sed
usw.) gibt, die dies tun .
Was Shells wie bash do support unterstützen, ist globbing, das einige ähnliche Zeichen (z. B. *) verwendet, aber nicht dasselbe ist .
Neuere Versionen von bash haben einen Operator für reguläre Ausdrücke, =~
:
for x in `ls`; do
if [[ $x =~ .+\..* ]]; then
echo $x;
fi;
done