Ich kann grep mit regulären Ausdrücken nicht richtig zum Laufen bringen

Ich kann grep mit regulären Ausdrücken nicht richtig zum Laufen bringen
ssh1% cat temp

sarah

saab

marrrrrrrrra

marrrrrrrtha

ssh1% grep ar*a temp

grep: No match.

Sollte dies nicht die Ausgabe sein?

sarah saab marrrrrra

Ich habe versucht, Putty und Nxclient für Windows 10 zu verwenden.

Antwort1

Sie verwenden csh, das das sieht *und versucht, es alsShell-Globund schlägt fehl. Das heißt, es cshheißt hier "Keine Übereinstimmung", nicht grep. Im Gegensatz zuMuscheln der Bourne-Familie, cshübergibt kein nicht erweiterbares Glob-Muster an den Befehl, daher müssen Sie es in Anführungszeichen setzen, um cshes freizugeben grep.

Ich empfehle hier einfache Anführungszeichen, da Sie nicht versuchen,interpoliereneine Variable in den String:

% grep 'ar*a' temp
sarah
saab
marrrrrrrrra

Doppelte Anführungszeichen funktionieren in diesem Fall auch, da Ihr Muster kein enthält $, aber ich empfehle trotzdem die Verwendung einfacher Anführungszeichen. Es ist eine lohnende Angewohnheit, sorgfältig zu überlegen, welche Anführungszeichen Sie in Sprachen verwenden, in denen Sie sie halb austauschbar verwenden können, wie z. B. Shell, Perl usw. Wir benötigen hier keine String-Interpolation, daher entscheiden wir uns, den Anführungszeichenstil, der dies zulässt, nicht zu verwenden.

Sie sollten übrigens auch RE-Muster unter Shells der Bourne-Familie zitieren. Wie Mike Wagner in seinem Kommentar oben andeutet, weil reguläre Ausdrücke und Glob-Musterviele der gleichen Sonderzeichen verwenden, können Sie manchmal ein RE-Muster schreiben, das nurdas passiertum auch auf einige Dateien zu passen, und wird daher unerwartet von der Shell erweitert.

verwandte Informationen