Desculpe, mas seu exemplo echo não funciona. Parece funcionar porque as aspas duplas ( " ) são interpretadas por bash e nunca são passadas para sed .
Observe a diferença entre os dois exemplos a seguir:
$ echo "[email protected]"
[email protected]
$ echo "\"[email protected]\""
"[email protected]"
Seu comando echo não alimenta o " para sed , então parece funcionar porque não há " para remover na sequência de entrada.
Se você tentar escapar corretamente do " , o exemplo echo não funcionará como file exemplo:
$ echo "\"[email protected]\"" | sed 's/"([^"]*)"/echo "\"[email protected]\"" | sed 's/"\([^"]*\)"//g'
/g'
"[email protected]"
O comando sed tem dois erros:
- Você está usando a sintaxe de regex estendida. Você pode usá-lo somente se tiver
gnused. A diferença está na maneira como eles usam os parênteses. - Você deve contar as referências anteriores começando por
1.
Portanto, o comando correto é:
echo "\"[email protected]\"" | sed -E 's/"([^"]*)"//g'
ou, se o seu sed suportar regex estendido:
$ echo "[email protected]"
[email protected]
$ echo "\"[email protected]\""
"[email protected]"