Como usar o grep para procurar por expressões regulares, sem analisá-las

2
grep . filename.txt 

Isto apenas retorna todo o conteúdo em filename.txt, porque. é uma expressão regular que significa qualquer caractere. Como eu uso o grep para procurar períodos ou outras expressões regulares, como *?

    
por MYV 28.05.2013 / 21:19

3 respostas

10

grep usa expressões regulares por padrão, qualquer padrão dado a grep é considerado uma expressão regular, a menos que você use a opção -F .

Expressões como *? não fazem parte da linguagem POSIX regex , que é o que usa grep por padrão. Você pode usar essas construções especificando uma linguagem regex diferente, Perl, por exemplo:

$ cat a.txt
aaaaaaaa
aabbccaaaacccccccccb
bbbbbb
$ grep -oP 'a.*?b' a.txt
aab
aaaacccccccccb

Para procurar por uma linha contendo pelo menos um período, use

$ grep '\.*' foo.txt

Para uma linha contendo apenas períodos, use

$ grep '^\.*$' foo.txt

Para expressões regulares mais complexas, use -F :

$ grep -F '[a-z]*.*[AHG].*' foo.txt
[a-z]*.*[AHG].*
    
por 28.05.2013 / 21:27
5

Use fgrep em vez disso, se quiser pesquisar literais, não expressões regulares.

Se você quiser apenas desativar o significado especial de um dos caracteres regex com grep , simplesmente escape com a barra invertida, observando que, se estiver digitando isso em uma linha de comando, talvez seja necessário para "escapar das fugas" porque a sua concha pode retirar uma camada delas antes de as passar para a criança.

    
por 28.05.2013 / 21:26
4

grep -F não expandirá os regexes. homem grep:

-F, --fixed-strings Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.

Por favor, note F e não f !

    
por 28.05.2013 / 21:29