Come includere un personaggio spaziale con grep?


17

Ho un file chiamato esempio

$ cat example

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

e quando uso grepper ottenere la linea che ha uno spazio prima .pdf, non riesco a capirla.

grep *.pdf example

non restituisce nulla, (voglio dire "grep, trova zero o più spazi prima .pdf", ma nessun risultato)

e se uso:

grep i*.pdf example

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

tutte le righe ritornano, perché sto dicendo "grep, abbinami iuna o zero volte, ok".

e infine:

grep " *.pdf" example

nessun risultato ritorna

Per questo esempio, voglio vedere

grep .pdf 

come uscita

Cosa c'è di sbagliato nel mio pensiero?

Risposte:


31

Assicurati di citare la tua espressione. Penso che il gioco di parole della shell sia uno dei tuoi problemi qui, ma dovresti sempre citare la tua regex, poiché altrimenti tutti i tipi di cose andranno male.

$ grep ' \.pdf' example
grep .pdf

O se potrebbero esserci più spazi (non possiamo utilizzarli *poiché corrisponderanno ai casi in cui non ci sono spazi precedenti)

grep ' \+\.pdf' example

+significa "uno o più caratteri precedenti". In BRE devi \evitarlo con per ottenere questa funzione speciale, ma puoi usare ERE invece per evitarlo

grep -E ' +\.pdf' example 

Puoi anche usare \sin grepper indicare uno spazio

grep '\s\+\.pdf' example

Dovremmo scappare letteralmente .perché in regex .significa qualsiasi personaggio, a meno che non sia in una classe di caratteri.


Sei stato il primo a notare che l'ultima riga aveva spazio.
Pilota 6

@ Grazie Pilot6. La domanda era un po 'confusa, scritta :)
Zanna,

Ci dovrebbe essere un distintivo per il primo che ha capito la domanda ;-)
Pilot6

@Zanna, c'è qualcosa che non va in qualsiasi momento, ad esempio in questi casi? egrep ti offre sempre un vantaggio ...
solfish

@solfish egrepè (in termini di stile regex, afaik) lo stesso di grep -E, e credo che dovremmo usare questi ultimi - egrepecc. sono presumibilmente deprecati a favore delle grepbandiere
Zanna
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.