以下のようなJSONが記載されているテキストファイルをシェルスクリプト(bash)を使って内容を書き換えようとしています。
JSON
1{ 2 "apple":"sweet", 3 "money":"20000", 4 { 5 6 "hoge":"hoge", 7 "aaaa":"bbbb", 8 "sample":{ 9 "profile":{ 10 "name":"hoge", 11 "age":"28", 12 "nationality":"Japan" 13 }, 14 "hobby":{ 15 "music":"rock", 16 "sports":"baseball" 17 }, 18 "CCC":[ 19 { 20 "test":"sample", 21 "sample":"hogehoge" 22 }, 23 { 24 "hogehoge":"bbbb", 25 "xxxxx":"yyyyy" 26 } 27 ], 28 "friends":[ 29 { 30 "name":"Jane", 31 "age":"23", 32 "sex":"female", 33 "nationality":"America" 34 }, 35 { 36 "name":"Lee", 37 "age":"19", 38 "sex":"male", 39 "nationality":"China" 40 } 41 ] 42 } 43 }, 44 "last":"final" 45}
具体的に以下の部分をsedコマンドを使って書き換えようとしています。
JSON
1 "sample":{ 2 "profile":{ 3 "name":"hoge", 4 "age":"28", 5 "nationality":"Japan" 6 }, 7 "hobby":{ 8 "music":"rock", 9 "sports":"baseball" 10 }, 11 "CCC":[ 12 { 13 "test":"sample", 14 "sample":"hogehoge" 15 }, 16 { 17 "hogehoge":"bbbb", 18 "xxxxx":"yyyyy" 19 } 20 ], 21 "friends":[ 22 { 23 "name":"Jane", 24 "age":"23", 25 "sex":"female", 26 "nationality":"America" 27 }, 28 { 29 "name":"Lee", 30 "age":"19", 31 "sex":"male", 32 "nationality":"China" 33 } 34 ] 35 }
スクリプトは以下のような処理を実装しました。
bash
1#!/ bin/bash 2 3updateSample="\"sample\":{\"profile\":{\"name\":\"Tommy\",\"age\":\"24\",\"nationality\":\"Canada\"},\"hobby\":{\"music\":\"pop\",\"sports\":\"tennis\"}, \"CCC\":[{\"test\":\"sample\",\"sample\":\"hogehoge\"},{\"hogehoge\":\"bbbb\",\"xxxxx\":\"yyyyy\"}], \"friends\":[{\"name\":\"King\",\"age\":\"44\",\"sex\":\"male\",\"nationality\":\"Turkey\"},{\"name\":\"John\",\"age\":\"33\",\"sex\":\"male\",\"nationality\":\"America\"},{\"name\":\"Lala\",\"age\":\"10\",\"sex\":\"female\",\"nationality\":\"India\"}]}" 4 5 6#sample以降の情報を取得する 7cmdExeResult=$(cat test.txt | awk '{print substr($0, index($0, "¥"sample"))}') 8#不要な部分を取り除く("last"以降) 9cmdExeResult=$(echo ${cmdExeResult} | awk '{ sub("},¥"last.*", ""); print $0;}') 10#データを置換する 11sed -i -e "s/$cmdExeResult/$updateSample/g" test.text 12
作成したシェルを動かして見たところ、以下のようなエラーが出てしまいました。
sed: -e expression #1, char 6: unterminated `s' command
メタ文字が入っているのが原因かなと思い、解決策を探していますがなかなかうまくできません。
そもそも置換する条件に誤りがあるのでしょうか?
シェルスクリプトやlinuxコマンドに詳しい方がいましたらご回答いただけないでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/18 14:22