As bandeiras funcionam juntas no caminho oposto ao que você está esperando. A documentação de /e
é , para o registro:
This command allows one to pipe input from a shell command into pattern space. If a substitution was made, the command that is found in pattern space is executed and pattern space is replaced with its output. A trailing newline is suppressed; results are undefined if the command to be executed contains a nul character. This is a GNU sed extension.
Isso é um pouco tortuosamente escrito. O que significa é que, após a conclusão de um comando s///
para esta linha, se houve uma mudança, a (nova) linha é executada como um comando e sua saída é usada como substituta para esta linha.
Então, para o seu comando:
echo AAA | sed -r 's/A/echo B/ge'
primeiro substitui cada A
por echo B
e então executa o resultado como um comando. Tem (grosso modo) o mesmo efeito que:
echo AAA | sed -r 's/A/echo B/g' | sh
O GNU sed
não suporta diretamente o modo que você deseja, embora você possa falsificá-lo com um script mais complexo, se desejado. Como alternativa, o modificador /e
do Perl para seu comando s
tem o comportamento que você está procurando, mas com expressões Perl.