Você deve escapar dos caracteres especiais e usar um separador diferente de "/".
sed 's#string1#string2#'
Por exemplo,
sed 's/string/ /g' where string="a\c:ti]\']x""/\//:'~$%#^&"'
Isso é como passar a string para sed literalmente, e não como um padrão de expressão regular interpretado?
Eu vou usar isso com cygwin e no Ubuntu, então as soluções devem ser compatíveis com o ambiente.
Você deve escapar dos caracteres especiais e usar um separador diferente de "/".
sed 's#string1#string2#'
Veja este SOq:
Esta resposta é a seguinte:
é algo de que você precisa, exceto que você faria isso na primeira parte, não na segunda parte de s/first/second/
.
Como você está usando '
e "
em seus comandos sed, você terá que escapar de alguns deles. Tente fazer isso - crie dois arquivos:
1.sed
s_"a\c:ti]\']x""/\//:'~\$%#\^&"'_ _g
2.txt
"a\c:ti]\']x""/\//:'~$%#^&"'hello world m"a\c:ti]\']x""/\//:'~$%#^&"'
"a\c:ti]\']x""/\//:'~$%#^&"'this is working"a\c:ti]\']x""/\//:'~$%#^&"'
"a\c:ti]\']x""/\//:'~$%#^&"'as expected"a\c:ti]\']x""/\//:'~$%#^&"'
1.sed é o próprio script e 2.txt é um arquivo de teste. Corra assim para testar:
$ sed -f 1.sed 2.txt
hello world m
this is working
as expected
$
Espero que isso ajude.
Tags sed