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].*