Como escapar metacaracteres para egrep como metaquote de Perl?

3

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 .

    
por kevinarpe 12.11.2015 / 05:09

2 respostas

4

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 .

    
por 12.11.2015 / 05:14
2

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
  1. 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
    
  2. esperamos que isso não corresponda porque está usando a string de escape.

    $ echo "foo bar abc-def-ghi baz" | grep "$escaped"
    $ echo $?
    1
    
  3. 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
    
por 12.11.2015 / 17:11