我有一组json文件,其中在最后一个键值对之后我有逗号需要被替换。
{
"RepetitionTime": 0.72,
"TaskName":"WM",
"Manufacturer": "Siemens",
"ManufacturerModelName": "Skyra",
"MagneticFieldStrength": 3.0,
"EchoTime":"0.033",
}
应该看起来像:
{
"RepetitionTime": 0.72,
"TaskName":"WM",
"Manufacturer": "Siemens",
"ManufacturerModelName": "Skyra",
"MagneticFieldStrength": 3.0,
"EchoTime": 0.033
}
我怎样才能使用sed实现这个目标。 编辑:更改输出 - 不应该有任何""大约0.033。
sed -i \'7i'\\t'\"EchoTime\": \0.033\' sub-285345_task-WM_acq-RL_bold.json
没有帮助我。我尝试过其他一些选择但没有成功..
我也在python中使用了simplejson和json包。但鉴于文件是json,json.loads(文件)抛出错误..
我现在更喜欢sed over python ..
答案 0 :(得分:1)
sed -Ei.bak 's/^([[:blank:]]*"EchoTime[^"]*":)"([^"]*)",$/\1\2/' file.json
会这样做
示例输出
{
"RepetitionTime": 0.72,
"TaskName":"WM",
"Manufacturer": "Siemens",
"ManufacturerModelName": "Skyra",
"MagneticFieldStrength": 3.0,
"EchoTime":0.033
}
备注强>
E
启用扩展正则表达式。i
要启用就地编辑,会创建一个扩展名为.bak的备份文件。 答案 1 :(得分:0)
请尝试以下命令。
sed -i 's#\(.*\)EchoTime":"\(.*\)",$#\1EchoTime":\2#' sub-285345_task-WM_acq-RL_bold.json
答案 2 :(得分:0)
如果您不限于sed并打开awk,则可以使用以下内容:
awk ' BEGIN{FS=OFS=":"}/EchoTime/ {gsub(/\"|\,/,"",$2)}1' file.json
{
"RepetitionTime": 0.72,
"TaskName":"WM",
"Manufacturer": "Siemens",
"ManufacturerModelName": "Skyra",
"MagneticFieldStrength": 3.0,
"EchoTime":0.033
}
说明:
FS=OFS=":"
:这会将输入和o / p字段分隔符设置为“:”
/EchoTime/
:搜索包含EchoTime的行。
/EchoTime/{gsub(/\"|\,/,"",$2)}
:找到回显时间后,使用global sub替换该行的第二个字段中的双引号和逗号。
1
:awk的默认操作是打印。
要在原始文件中进行更改:
awk ' BEGIN{FS=OFS=":"}/EchoTime/ {gsub(/\"|\,/,"",$2)}1' file.json >json.tmp && mv json.tmp file.json