我有一个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"*/'
我在这里错过了什么?如何让我的正则表达式支持这两种格式?
答案 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