Como usar as cadeias verbatim em sed?

5

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.

    
por user93200 07.04.2012 / 01:26

2 respostas

2

Você deve escapar dos caracteres especiais e usar um separador diferente de "/".

sed 's#string1#string2#'
    
por 07.04.2012 / 01:37
1

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.

    
por 07.04.2012 / 03:50

Tags