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

5 sed text-processing regular-expression

我有一个 json 字符串,它有一个双重转义/单转义换行符的大杂烩。Json 解析器不允许其字符串值有单个反斜杠转义。

我需要统一使所有这些都进行双重转义

内容看起来像,

this newline must not be changed ---- \\n
this newline must be changed - \n
Run Code Online (Sandbox Code Playgroud)

当我运行 sed 命令时,

 sed -i 's/([^\])\n/\\n/g' ~/Desktop/sedTest 
Run Code Online (Sandbox Code Playgroud)

它不会取代任何东西

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

Arc*_*mar 2

尝试

sed -i 's,\([^\\]\)\\n,\1\\\\n,'  file
sed -i 's,\([^\]\)\\n,\1\\\\n,'  file
Run Code Online (Sandbox Code Playgroud)

在哪里

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

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