2016-08-31 8 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を使って、これをachiveすることができます。 編集:変更された出力 - 約0.033はありません。

sed -i \'7i'\\t'\"EchoTime\": \0.033\' sub-285345_task-WM_acq-RL_bold.json 

は私を助けません。私は他のいくつかのオプションを試してみましたが、成功しませんでした。

私はpythonでsimplejsonとjsonパッケージを使ってトリオしました。しかし

は、私は今..

答えて

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

のためのpythonの上にsedを好むだろう。..ファイルが正しくありませんJSON、json.loads(ファイル)のエラーをスローしていることを考えると、以下のコマンドを試してみてください。

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フィールドセパレータを設定します":"として

/EchoTime/:EchoTimeを含む行を検索します。

/EchoTime/{gsub(/\"|\,/,"",$2)}:エコー時間が検出されると、その行の第2フィールドにグローバルサブ置換、二重引用符およびカンマを使用します。

1:awkのデフォルト動作は、印刷することです。元のファイルに変更を行うため

:私は出力に小さな編集を行っている

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