cant, converta uma barra invertida para double backslash

4

Eu tenho uma string json, que tem um potpourri de caracteres de nova linha escapados / escapados duplos. O analisador Json não permite que seu valor de cadeia tenha escapes de barra invertida.

Eu preciso uniformemente fazer todos eles para fugas duplas

O conteúdo parece

this newline must not be changed ---- \n
this newline must be changed - \n

Quando executo o comando sed,

 sed -i 's/([^\])\n/\n/g' ~/Desktop/sedTest 

não está substituindo nada

([^\]) , esse padrão é usado para não alterar \n que já tem mais uma barra invertida.

    
por Madhavan Kumar 14.09.2015 / 16:09

3 respostas

2

tente

sed -i 's,\([^\]\)\n,\\n,'  file
sed -i 's,\([^\]\)\n,\\n,'  file

onde

  • \ deve ser escapado por \\
  • \( .. \) padrão de captura
  • na mão direita é o primeiro padrão capturado.
  • segundo formulário com uma única sugestão \ in [^\] conforme @cuonglm.

você precisa manter o padrão, senão ele será descartado.

    
por 14.09.2015 / 16:17
4

Dada sua entrada de amostra:

$ cat /tmp/foo
this newline must not be changed ---- \n
this newline must be changed - \n

Isso parece fazer o que você quer:

$ sed -e 's@\([^\]\)\n@\\n@' /tmp/foo
this newline must not be changed ---- \n
this newline must be changed - \n
    
por 14.09.2015 / 16:15
3

Com \n no LHS, você tentou corresponder um caractere de nova linha em vez de literal \n .

Tente:

sed -e 's/\([^\]\)\(\n\)/\/g' file

ou menor com expressão regular estendida:

sed -E 's/([^\])(\n)/\/g' file
    
por 14.09.2015 / 16:17