Ich fand echo file|grep fil*fehlgeschlagen, aber echo abcd|grep abc*erfolgreich.
Ich verstehe es nicht, kann jemand erklären?
Ich fand echo file|grep fil*fehlgeschlagen, aber echo abcd|grep abc*erfolgreich.
Ich verstehe es nicht, kann jemand erklären?
Antworten:
Es gibt zwei Probleme mit Ihrem Beispiel.
Das wichtigste ist, dass Sie davon ausgehen, dass reguläre Ausdrücke genauso funktionieren wie Glob-Muster , da *es sich um einen Platzhalter handelt, der "eine beliebige Folge von Zeichen" bedeutet. In regulären Ausdrücken, *bedeutet „ eine beliebige Anzahl des vorherigen Atom“ statt, so fil*Mittel , fgefolgt von inull oder mehr gefolgt lZeichen. Sie müssen sagen grep fil.*, um die beabsichtigte Bedeutung zu erhalten: .bedeutet "jedes einzelne Zeichen, das .*heißt" jede Folge von Zeichen ".
Das kleinere Problem ist, dass Sie nicht zitierte Sonderzeichen verwenden, die unter Glob-Regeln etwas bedeuten, was bedeutet, dass die Shell sie interpretieren kann. Wenn Sie Dateien im lokalen Verzeichnis haben die glob - Muster passende fil*oder abc*, würde die Schale sie erweitert , so grepwürde die erweiterten Dateinamen als Muster erhält, nicht die beabsichtigten RE. Wenn Sie solche Zeichen in der Befehlszeile verwenden, sollten Sie sie in Anführungszeichen setzen : echo file | grep 'fil.*'.
echo file|grep fil*Antworten mitfile.