Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 什么';我的sed正则表达式有什么问题吗_Json_Unix_Sed - Fatal编程技术网

Json 什么';我的sed正则表达式有什么问题吗

Json 什么';我的sed正则表达式有什么问题吗,json,unix,sed,Json,Unix,Sed,我有一个sed命令来替换格式中的json键值对 "XXXXX" : "YYYYY" 或 这是我的sed命令 sed -i 's/\("$\$XXXX\$\$\"\s*:\s*\"\)[^\"]*/\1YYYY/' 现在我想修改上面的正则表达式来更新键值对 例如: "XXXXX" : "YYYYY" 应更新至 "XXXXX" : "ZZZZZ" "XXXXX" : ZZZZZ 及 应更新至 "XXXXX" : "ZZZZZ" "XXXXX" : ZZZZZ 请注意区别,如果值

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

"XXXXX" : "YYYYY"  

这是我的sed命令

sed -i  's/\("$\$XXXX\$\$\"\s*:\s*\"\)[^\"]*/\1YYYY/'
现在我想修改上面的正则表达式来更新键值对

例如:

"XXXXX" : "YYYYY" 
应更新至

"XXXXX" : "ZZZZZ"
"XXXXX" : ZZZZZ

应更新至

"XXXXX" : "ZZZZZ"
"XXXXX" : ZZZZZ
请注意区别,如果值带有引号,则值应该用引号更新,而它的值没有引号,那么它也应该更新它

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

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

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

使用可选的捕获组:

$ 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,

此sed也可以工作:

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

因此,您希望从
“XXXXX”:“YYYYY”
传递到
“XXXXX”:YYYYY
?@fedorqui删除了我描述中的歧义。基本上,我希望我的正则表达式以
“XXXXX”:“YYYYY”
“XXXXX”:YYYYY
两种格式更新密钥。对。我做了一点更新,让它更清楚。不管怎样,您能否显示所需的输出以使其更易于遵循?谢谢您的解决方案。它工作正常,但如果键值对的格式为
“XXXXX”:“YYYYY”,
它将更新为
“XXXXX”:“ZZZZZ”,
“XXXXX”:YYYYY,
将更新为
“XXXXX”:ZZZZZ
。请注意,缺少逗号。我试着编辑你的正则表达式,但是没法用,你能看一下吗<代码>sed-r的/^(“XXXXX”\s*:\s*)(“”?[^”]*(“”?,)?/\1\2NEW\u VALUE\3\4/'这从来都不是一个规范,所以它当然不会像预期的那样工作,幸运的是,修复的问题很小。你应该从一开始就让你的问题清晰且具有代表性。非常感谢:)在一个小时内得到了答案,我花了一天多的时间才找到答案!没问题,你会在不到10分钟内得到答案es如果您从一开始就发布了输入示例和预期输出,请确保发布了清晰的问题并阅读了。