Não é grep que está causando isso. É seu bash que está interpretando o ! . Mude para uma versão mais recente de bash ou use single quotes '!' para calar bash .
Se eu correr
grep "!" test.txt
mostrará o erro
bash: !: event not found
Bem, eu sei que devo usar grep '!' . Mas como entender o erro acima?
Eu sei que ! é um caractere especial de bash. De acordo com o link .
Double quotes: "..." prevents some substitutions but allows others. Every substitution that begins with a dollar sign $ is performed, as is the legacy
...(backtick) command substitution. Backslash escaping is also performed. No word splitting or filename expansion is performed.
Não menciona que as aspas duplas afetarão! Alguém poderia explicar como o bash ou o grep interpretam grep "!" ? Qual é o "evento"?
Não é grep que está causando isso. É seu bash que está interpretando o ! . Mude para uma versão mais recente de bash ou use single quotes '!' para calar bash .
Você está vendo o recurso Expansão do histórico do Bash. Alguns acham útil lembrar de comandos anteriores, mas eu coloquei set +o histexpand no meu .bashrc e pressione Ctrl + R para procurar parte do comando.
Tags bash grep special-characters