我的sed正则表达式出了什么问题

时间:2013-04-18 09:25:47

标签: json unix sed

我有一个sed命令来替换

格式的json键值对
"XXXXX" : "YYYYY"  

"XXXXX" : YYYYY  

这是我的sed命令,

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

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

示例:

"XXXXX" : "YYYYY" 

应更新为

"XXXXX" : "ZZZZZ"

"XXXXX" : YYYYY

应更新为

"XXXXX" : ZZZZZ

请注意区别,如果值带引号,则值应使用引号更新,且值没有引号,那么它也应该更新

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

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

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

2 个答案:

答案 0 :(得分: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,

答案 1 :(得分:0)

这个sed也可以起作用:

sed '/^"XXXXX"/{s/YYYYY/ZZZZZ/}' file