Wie füge ich ein Leerzeichen mit grep ein?

16

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 grepdie Zeile mit dem Leerzeichen vorher .pdfbekomme, kann ich sie scheinbar nicht verstehen.

grep *.pdf example

gibt nichts zurück (ich möchte sagen, "grep, finde keine oder mehr Leerzeichen davor .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 ieinmal 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?

Solfish
quelle

Antworten:

30

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 diese nicht verwenden, *da sie den Fällen entsprechen, in denen keine vorangestellten Leerzeichen vorhanden sind)

grep ' \+\.pdf' example

+bedeutet "eines oder mehrere der vorhergehenden Zeichen". In BRE müssen Sie es mit verlassen \, 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 verwenden , \sin grepeinen Raum bedeuten

grep '\s\+\.pdf' example

Wir sollten wörtlich .umgehen ., weil in Regex jedes Zeichen bedeutet, es sei denn, es ist in einer Zeichenklasse.

Zanna
quelle
Sie waren die Ersten, die bemerkten, dass in der letzten Zeile Platz war.
Pilot6
@Pilot6 danke. Die Frage wurde etwas verwirrend geschrieben :)
Zanna
Es sollte ein Abzeichen für den ersten geben, der die Frage verstanden hat
;-)
@Zanna, gibt es irgendetwas falsches, um in diesen Fällen jederzeit egrep zu gehen? egrep bringt dir immer Vorteile ...
solfish
@solfish egrepist (in Bezug auf den Regex-Stil, afaik) dasselbe wie grep -E, und ich glaube, wir sollen letzteres verwenden - egrepusw. sollen zugunsten von grep's Flaggen veraltet sein
Zanna