Como incluir um caractere de espaço com grep?

5

Eu tenho um arquivo chamado exemplo

$ cat example

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

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

grep *.pdf example

não retorna nada, (eu quero dizer, "grep, combina zero ou mais espaços antes de .pdf ", mas nenhum 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, match me i one ou zero times, ok".

e por último:

grep " *.pdf" example

nenhum resultado é retornado

Para este exemplo, quero ver

grep .pdf 

como saída

O que está errado com o meu pensamento?

    
por solfish 24.08.2017 / 09:12

1 resposta

7

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

$ 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 do caractere precedente". No BRE você precisa escapar com \ para obter essa função especial, mas você pode usar o ERE para evitar isso

grep -E ' +\.pdf' example 

Você também pode usar \s em grep para significar um espaço

grep '\s\+\.pdf' example

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

    
por Zanna 24.08.2017 / 09:25