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