Use as opções -F
para tornar o padrão de tratamento grep
fixo como uma string:
grep -F 'abc.def.ghi' <file
E também note que você não precisa invocar egrep
.
Perl tem uma função chamada metaquote()
para escapar de todos os caracteres especiais para uma expressão regular.
Existe uma técnica equivalente para egrep
?
Exemplo: se eu estiver procurando pela string abc.def.ghi
, preciso lembrar de excluir os pontos manualmente, por exemplo, abc\.def\.ghi
Suponho que egrep
não tenha um modo / recurso interno para fazer isso, mas estou aberto a "one-liners" em Perl / sed / awk para simular metaquote()
para egrep
. Além disso, o metaquote()
do Perl pode funcionar em casos triviais, mas a sintaxe da expressão regular é diferente entre egrep
e perl
.
Você precisa fazer isso sozinho: esse comando sed escapou de qualquer caractere não alfanumérico, que é o que o quotemeta
faz (IIRC)
str="abc.def.ghi"
escaped=$(sed 's/[^[:alnum:]]/\&/g' <<< "$str")
echo "$escaped" # => abc\.def\.ghi
esperamos que isso corresponda porque está usando a string original como uma expressão regular
$ echo "foo bar abc-def-ghi baz" | grep "$str"
foo bar abc-def-ghi baz
esperamos que isso não corresponda porque está usando a string de escape.
$ echo "foo bar abc-def-ghi baz" | grep "$escaped"
$ echo $?
1
esperamos que isso corresponda porque está usando a string de escape.
$ echo "foo bar abc.def.ghi baz" | grep "$escaped"
foo bar abc.def.ghi baz