2016-08-31 64 views
1

我有一組json文件,在最後一個鍵值對之後我需要更換逗號。使用Sed來查找和替換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包三重奏。但是,鑑於這些文件是incorrct JSON,json.loads(文件)拋出錯誤..

我寧願用sed在蟒蛇現在...

回答

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擴展名的備份文件。
0

請嘗試以下命令。

sed -i 's#\(.*\)EchoTime":"\(.*\)",$#\1EchoTime":\2#' sub-285345_task-WM_acq-RL_bold.json 
+0

我已經做了一個小編輯到輸出。如何解決這個變化..? –

+0

@KashiVishwanath,我更新了我的答案。 – gzh

+0

開始時''*'是不明智的。你檢查空格。 –

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字段分隔符as「:」

/EchoTime/:搜索包含EchoTime的行。

/EchoTime/{gsub(/\"|\,/,"",$2)}:一旦找到回波時間,使用全局子來替換該行的第二個字段中的雙引號和逗號。

1:awk的默認操作是打印。

對於原始文件進行更改:

awk ' BEGIN{FS=OFS=":"}/EchoTime/ {gsub(/\"|\,/,"",$2)}1' file.json >json.tmp && mv json.tmp file.json