sed模式替换“到\”和\到\\,除了json字符串

JOI*_*MAX 3 sed text-processing

我有问题,更换"\"\\\和除外"的JSON

test.txt 输入文件

"a"     "b"     
{"1":"female","2":"197312","3":"359","4":"201109","5":"mail"}
\uff08\u524d\u5bfe\u5fdc
Run Code Online (Sandbox Code Playgroud)

我想输出

\"a\"     \"b\"     
{"1":"female","2":"197312","3":"359","4":"201109","5":"mail"}
\\uff08\\u524d\\u5bfe\\u5fdc
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

为了更健壮,您可以进行完整的 json 解析:

perl -0777 -pe '
  s@(".*?"|\\)|(\{(?:"(?:\\.|[^"])*+"|(?2)|[^"{}]++)*+\})|[^{}\\"]+@
  $1 ? $1 =~ s/["\\]/\\$&/gr : $&@gse'
Run Code Online (Sandbox Code Playgroud)

哪个输入像

"a"     "b"     "c{d"
{"1":"female","2":"197312","3":"359","4":"201109","5":"mail"}
{
  "1": {"x": "y"}
  "2": "}}}"
  "3": ["{\"x", "}"]
}
\uff08\u524d\u5bfe\u5fdc
Run Code Online (Sandbox Code Playgroud)

\"a\"     \"b\"     \"c{d\"
{"1":"female","2":"197312","3":"359","4":"201109","5":"mail"}
{
  "1": {"x": "y"}
  "2": "}}}"
  "3": ["{\"x", "}"]
}
\\uff08\\u524d\\u5bfe\\u5fdc
Run Code Online (Sandbox Code Playgroud)

如果输入包含json 对象"foo\"bar""foo\nbar"在 json 对象之外,您可能想要阐明您想要做什么。