sed,将单反斜杠转换为双反斜杠

sed,将单反斜杠转换为双反斜杠

我有一个 json 字符串,其中包含双重转义/单转义换行符。 Json 解析器不允许其字符串值有单个反斜杠转义。

我需要统一让他们全部双逃亡

内容看起来像,

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

当我运行 sed 命令时,

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

它不会取代任何东西

([^\]),此模式用于不改变\n已经多了一个反斜杠的模式。

答案1

鉴于您的示例输入:

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

这似乎做你想做的:

$ sed -e 's@\([^\]\)\\n@\1\\\\n@' /tmp/foo
this newline must not be changed ---- \\n
this newline must be changed - \\n

答案2

尝试

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

在哪里

  • \必须通过以下方式逃脱\\\\
  • \( .. \)是捕获模式
  • \1右侧是第一个捕获的模式。
  • 根据 @cuonglm 建议,第二种\形式是单曲。[^\]

您需要保留该模式,否则它将被丢弃。

答案3

\nLHS 中,您尝试匹配换行符而不是文字\n

尝试:

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

或更短的扩展正则表达式:

sed -E 's/([^\])(\\n)/\1\\\2/g' file

相关内容