it-swarm.com.de

Verwendung von regulären Ausdrücken mit ls

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.

35
Lucas Rezende

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 '.+\..+'
84
Chris Seymour

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