使用Sed查找并替换json字段
我有一组json文件,在最后一个键值对之后,我有需要替换的逗号使用Sed查找并替换json字段,json,bash,unix,sed,Json,Bash,Unix,Sed,我有一组json文件,在最后一个键值对之后,我有需要替换的逗号 { "RepetitionTime": 0.72, "TaskName":"WM", "Manufacturer": "Siemens", "ManufacturerModelName": "Skyra", "MagneticFieldStrength": 3.0, "EchoTime":"0.033", } 它应该是这样的: { "RepetitionTime": 0.72
{
"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(file)会抛出错误
我现在更喜欢sed而不是python 请尝试以下命令
sed -i 's#\(.*\)EchoTime":"\(.*\)",$#\1EchoTime":\2#' sub-285345_task-WM_acq-RL_bold.json
我会的
样本输出
{
"RepetitionTime": 0.72,
"TaskName":"WM",
"Manufacturer": "Siemens",
"ManufacturerModelName": "Skyra",
"MagneticFieldStrength": 3.0,
"EchoTime":0.033
}
注释
以启用扩展正则表达式E
要启用就地编辑,将创建扩展名为.bak的备份文件李>i
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)}
:找到EchoTime后,使用全局sub替换该行第二个字段中的双引号和逗号
1
:awk的默认操作是打印
要在原始文件中进行更改,请执行以下操作:
awk ' BEGIN{FS=OFS=":"}/EchoTime/ {gsub(/\"|\,/,"",$2)}1' file.json >json.tmp && mv json.tmp file.json
我对输出做了一个小的编辑。如何处理这一更改..?开头的
*
是不明智的。请检查是否有空格。@mona_sax我只想保留json文件的缩进。使用空格无论如何都不会让您失去缩进。
awk ' BEGIN{FS=OFS=":"}/EchoTime/ {gsub(/\"|\,/,"",$2)}1' file.json >json.tmp && mv json.tmp file.json