GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie unterscheiden sich reguläre Ausdrücke von Platzhaltern, die zum Filtern von Dateien verwendet werden?

Während wir * verwenden um null oder mehr vorherige Zeichen in grep zu bezeichnen verwenden wir *.c um alle C-Dateien zu finden, wenn wir es mit ls verwenden Befehl wie ls *.c . Könnte jemand sagen, wie die Verwendung von * unterscheidet sich in diesen beiden Fällen?

Akzeptierte Antwort:

Shell-Dateinamen-Globing und reguläre Ausdrücke verwenden einige der gleichen Zeichen und haben ähnliche Zwecke, aber Sie haben Recht, sie sind nicht kompatibel. File Name Globbing ist ein viel weniger leistungsfähiges System.

Globbing im Dateinamen:

  • * bedeutet „null oder mehr Zeichen“

  • ? bedeutet „jedes einzelne Zeichen“

Aber in regulären Ausdrücken müssen Sie .* verwenden bedeutet „null oder mehr Zeichen“ und . bedeutet „jedes einzelne Zeichen“. Ein ? bedeutet in Regexes etwas ganz anderes:null oder eine Instanz des vorangehenden RE-Elements.

Eckige Klammern ([] ) scheinen in beiden Systemen auf dem System, auf dem ich dies schreibe, gleich zu funktionieren, zumindest für einfache Fälle. Dazu gehören Dinge wie POSIX-Zeichenklassen (z. B. [:alpha:] ). Wenn Ihre Befehle jedoch auf vielen verschiedenen Systemtypen funktionieren sollen, rate ich davon ab, etwas anderes als elementare Dinge wie Zeichenlisten zu verwenden (z. B. [abeq] ) und eventuell Zeichenbereiche (z.B. [a-c] ).

Aufgrund dieser Unterschiede sind die beiden Systeme nur für einfache Fälle direkt austauschbar. Wenn Sie einen Regex-Abgleich von Dateinamen benötigen, müssen Sie es auf andere Weise tun. find -regex ist eine Option. (Beachten Sie, dass es auch find -name gibt , die übrigens Glob-Syntax verwendet.)


Linux
  1. So verwenden Sie Awk und reguläre Ausdrücke zum Filtern von Text oder Zeichenfolgen in Dateien

  2. So listen Sie Dateien auf, die von einem RPM- oder DEB-Paket in Linux installiert wurden

  3. So erstellen Sie ein Video aus PDF-Dateien unter Linux

  4. Wie kopiert man Dateien von Wine auf den Desktop?

  5. Wie kann man unter Linux Binärdateien von Textdateien unterscheiden?

So suchen Sie Dateien im Terminal unter Linux

So teilen Sie Dateien sicher über die Befehlszeile mit ffsend in Linux

So laden Sie Dateien von Remote-Linux-Servern herunter

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

So entfernen Sie alle Leerzeichen aus einer Textdatei

Wie entferne ich ungültige Zeichen aus Dateinamen?