Como incluir um caractere de espaço no grep?

17

Eu tenho um arquivo chamado exemplo

$ cat example

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

e quando eu uso greppara obter a linha que tem um espaço antes .pdf, não consigo entender.

grep *.pdf example

não retorna nada (quero dizer, "grep, corresponda a zero ou mais espaços antes .pdf", mas sem resultado)

e se eu usar:

grep i*.pdf example

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

todas as linhas retornam, porque estou dizendo "grep, combine comigo iuma ou zero vezes, ok".

e por fim:

grep " *.pdf" example

nenhum resultado retorna

Para esta amostra, eu quero ver

grep .pdf 

como saída

O que há de errado com o meu pensamento?

peixe-sol
fonte

Respostas:

31

Certifique-se de citar sua expressão. Eu acho que a divisão de palavras shell é um dos seus problemas aqui, mas você deve sempre citar seu regex, pois todos os tipos de coisas vão dar errado de outra maneira.

$ grep ' \.pdf' example
grep .pdf

Ou, se houver vários espaços (não podemos usar, *pois isso corresponderá aos casos em que não há espaços anteriores)

grep ' \+\.pdf' example

+significa "um ou mais dos caracteres anteriores". No BRE, você precisa escapá-lo \para obter essa função especial, mas você pode usar ERE para evitar isso.

grep -E ' +\.pdf' example 

Você também pode usar \sno grepsignificar um espaço

grep '\s\+\.pdf' example

Devemos escapar literalmente .porque em regex .significa qualquer caractere, a menos que esteja em uma classe de caractere.

Zanna
fonte
Você foi o primeiro a perceber que a última linha tinha espaço.
Pilot6
@ Pilot6 obrigado. A pergunta foi um pouco confusa:
Zanna
Deve haver algum crachá para o primeiro que entendeu a pergunta ;-)
Pilot6
@ Zanna, há algo errado para ir a qualquer momento egrep nesses casos? o egrep sempre te tira vantagem ...
solfish
@solfish egrepé (em termos de estilo regex, afaik) o mesmo que grep -E, e acredito que devemos usar o último - egrepetc, são supostamente preteridos em favor das grepbandeiras de
Zanna