Antworten:
Reguläre Ausdrücke und das Verschieben von Dateinamen sind zwei sehr unterschiedliche Dinge.
Reguläre Ausdrücke werden in Befehlen / Funktionen für den Mustervergleich im Text verwendet. Zum Beispiel im Musterparameter von grep
oder in Programmiersprachen.
Das Verschieben von Dateinamen wird von Shells zum Abgleichen von Datei- und Verzeichnisnamen mithilfe von Platzhaltern verwendet. Die Möglichkeiten des Globbing hängen von der Shell ab. Bash unterstützt beispielsweise Platzhalter wie:
*
stimmen mit 0 oder mehr Zeichen überein?
Stimmt mit 1 Zeichen überein[...]
stimmen mit einem Zeichen im angegebenen Satz übereinDiese Platzhalter sehen möglicherweise wie reguläre Ausdrücke aus und haben in der Tat [...]
dieselbe Bedeutung für Globbing und Regex. Aber *
und ?
meine verschiedene Dinge in Globbing und Regex.
In einem Kommentar schriebst du:
aber wie unterscheidet sich der Interpreter * ob es ein Joker oder ein Regex ist? zum Beispiel
grep a*b a*.txt
:?
Einfach. Art von.
Zunächst versucht die Shell, die Platzhalter zu interpretieren, indem sie sie mit den Dateinamen abgleichen. Wenn Dateien vorhanden sind, die mit "a" beginnen und mit "b" enden, wird die Shell durch a*b
die entsprechenden Dateinamen ersetzt. Gleiches gilt für a*.txt
. Wenn es keine übereinstimmenden Dateinamen gibt, übergibt die Shell die Argumente so, grep
wie sie waren.
Der erste Parameter von grep
sollte jedoch ein Muster sein. In 99,999% der praktischen Anwendungsfälle möchten Sie nicht, dass der erste Parameter von der Shell interpretiert wird. Die Absicht war also höchstwahrscheinlich:
grep "a*b" a*.txt
Dank der Anführungszeichen a*b
interpretiert die Shell sie nicht mit Globbing, sondern übergibt sie direkt an grep
. grep
Wird dies wiederum als regulären Ausdruck interpretieren (beabsichtigt).
Zusammenfassend lässt sich sagen, dass die Shell die Befehlszeile nach ihrer eigenen globalen Sprache interpretiert, in der Platzhalter verwendet werden. Befehle, Programme interpretieren ihre Parameter so, wie sie von ihren Autoren entworfen wurden.
Wenn ein Dateiname eine Zeichenfolge für Sie ist, können Sie Regex auch für Dateinamen verwenden. Zum Beispiel: Wenn Sie nach Dateinamen suchen möchten, die mit einem regulären Ausdruck übereinstimmen, können Sie versuchen:
find ./ -regex '.*[abc][xyz].*'
Der Befehl sucht nach Dateien, deren Name a, b oder c gefolgt von x, y oder z enthält. Dies ist nur ein Beispiel. Es gibt unendlich viele Möglichkeiten.
find ./ -name 'a*'
Sie * als Platzhalter. Wenn Sie tippen find ./ -regex 'a*'
, verwenden Sie * in einem regulären Ausdruck. Der wichtige Unterschied ist der Schalter -name
oder -regex
.