0

我有一个 sed 命令来替换格式中的 json 键值对

"XXXXX" : "YYYYY"  

或者

"XXXXX" : YYYYY  

这是我的 sed 命令,

sed -i  's/\("$\$XXXX\$\$\"\s*:\s*\"\)[^\"]*/\1YYYY/'

现在我想修改上面的正则表达式来更新键值对。

例子:

"XXXXX" : "YYYYY" 

应该更新为

"XXXXX" : "ZZZZZ"

"XXXXX" : YYYYY

应该更新为

"XXXXX" : ZZZZZ

请注意区别,如果 value 带有引号,则 value 应该用引号更新,并且 value 没有引号,它也应该更新它

这是我想出的 sed 命令,但它不起作用。

sed -i  's/\("$\$"qc.testset.ids"\$\$\"\s*:\s*"*\)[^\"]*/\1123123"*/'

我在这里错过了什么?如何让我的正则表达式支持这两种格式?

4

2 回答 2

1

使用可选的捕获组:

$ cat file
"XXXXX" : "YYYYY"
"XXXXX" : YYYYY
"XXXXX" : "YYYYY",  
"XXXXX" : YYYYY,

$ sed -r 's/^("XXXXX" : )(")?[^",]*(")?/\1\2ZZZZZ\3/' file
"XXXXX" : "ZZZZZ"
"XXXXX" : ZZZZZ
"XXXXX" : "ZZZZZ",  
"XXXXX" : ZZZZZ,
于 2013-04-18T10:15:43.693 回答
0

这个 sed 也可以工作:

sed '/^"XXXXX"/{s/YYYYY/ZZZZZ/}' file
于 2013-04-18T10:28:45.893 回答