it-swarm.com.de

Wie füge ich ein Leerzeichen mit grep ein?

Ich habe eine Datei mit dem Namen Beispiel

$ cat example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf

und wenn ich grep verwende, um die Zeile zu erhalten, die ein Leerzeichen vor .pdf enthält, kann ich sie anscheinend nicht verstehen.

grep *.pdf example

gibt nichts zurück (ich möchte sagen, "grep, finde keine oder mehr Leerzeichen vor .pdf", aber kein Ergebnis)

und wenn ich benutze:

grep i*.pdf example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf

alle Zeilen kehren zurück, weil ich sage "grep, passe mich i einmal oder nullmal an, ok."

und zuletzt:

grep " *.pdf" example

es wird kein Ergebnis zurückgegeben

Für dieses Beispiel möchte ich sehen

grep .pdf 

als Ausgabe

Was ist los mit meinem Gedanken?

11
solfish

Stellen Sie sicher, dass Sie Ihren Ausdruck zitieren. Ich denke, Shell Wordsplitting ist eines Ihrer Probleme, aber Sie sollten immer Ihren regulären Ausdruck angeben, da sonst alles Mögliche schief geht.

$ grep ' \.pdf' example
grep .pdf

Oder wenn es mehrere Leerzeichen gibt (wir können * nicht verwenden, da dies mit den Fällen übereinstimmt, in denen es keine vorhergehenden Leerzeichen gibt)

grep ' \+\.pdf' example

+ bedeutet "eines oder mehrere der vorhergehenden Zeichen". In BRE müssen Sie es mit \ schließen, um diese spezielle Funktion zu erhalten, aber Sie können stattdessen ERE verwenden, um dies zu vermeiden

grep -E ' +\.pdf' example 

Sie können auch \s in grep verwenden, um ein Leerzeichen zu bezeichnen

grep '\s\+\.pdf' example

Wir sollten uns dem Literal . entziehen, da in Regex . jedes Zeichen bedeutet, es sei denn, es gehört zu einer Zeichenklasse.

23
Zanna