Escapando caracteres especiais no grep regex

1

Eu estou tentando executar uma expressão regular do grep em um arquivo, onde eu tenho que excluir as linhas onde "00" e "0" aparecem. Eu criei esta expressão:

grep -a -E \"stored\"\:\ \"\*123\*(?!00)[0-9]{2,5}\#\" $filename

Mas quando eu tento executá-lo no bash, ou eu pego

-bash !00: event not found ou (depois de digitar set +H ),

-bash: syntax error near unexpected token (''

Por favor, o que preciso fazer para escapar dessa expressão regular corretamente no bash?

    
por Sina 08.02.2017 / 11:48

1 resposta

2

Você recebe uma mensagem de erro porque não escapou de ! , que tem um significado especial no shell. Para usar isso como parte do parâmetro padrão de grep , você deve citá-lo ou fugir dele.

Em vez de citar cada caractere especial um por um, é muito mais fácil colocar o padrão inteiro entre aspas simples ou duplas (dependendo do seu propósito), por exemplo:

grep -a -P '"stored": "*123*(?!00)[0-9]{2,5}#"'

Observe também que substitui -E por -P , porque lookahead negativo (?!...) não funciona em implementações típicas de grep extended regex. O -P sinalizador ativa expressões regulares Perl, que devem suportar isso.

    
por 11.02.2017 / 15:02