これがjson
私たちが編集したいファイルです
実施例1
{
"topics": [{"topic": "hfgt_kejd_tdsfd”}],
"version": 1
}
実施例2
{
"topics": [{"topic": "hfgt_kj_fsrfdfd”}],
"version": 1
}
topics
行の3番目の単語を別の単語に置き換えたい(sedまたはperl onelinerを介して)。
~について実施例1、次に変更しようとするhfgt_kejd_tdsfd
と予想される結果test_1
{
"topics": [{"topic": "test_1”}],
"version": 1
}
実施例3
more /tmp/file.json
{
"topics": [{"topic": "TOPIC_GGGG”}],
"version": 1
}
# sed 's/\(topic\": "\)[a-z_]*/\1test_1/' /tmp/file.json
{
"topics": [{"topic": "test_1TOPIC_GGGG”}],
"version": 1
}
ベストアンサー1
使用jq
:
$ jq '.topics[0].topic |= "test_1"' file.json
{
"topics": [
{
"topic": "test_1"
}
],
"version": 1
}
topic
これはJSONドキュメントを読み取り、配列の最初の要素エントリ値を文字列topics
に変更しますtest_1
。
変数に値(UTF-8でエンコードされている)がある場合:
$ val='Some value with "double quotes"'
$ jq --arg string "$val" '.topics[0].topic |= $string' file.json
{
"topics": [
{
"topic": "Some value with \"double quotes\""
}
],
"version": 1
}
パールの使用:
$ perl -MJSON -0777 -e '$h=decode_json(<>); $h->{topics}[0]{topic}="test_1"; print encode_json($h), "\n"' file.json
{"topics":[{"topic":"test_1"}],"version":1}
変数の使用:
$ val='Some value with "double quotes"'
$ STRING=$val perl -MJSON -0777 -e '$string = $ENV{STRING}; utf8::decode $string; $h=decode_json(<>); $h->{topics}[0]{topic}=$string; print encode_json($h), "\n"' file.json
{"topics":[{"topic":"Some value with \"double quotes\""}],"version":1}
どちらもPerlJSON
モジュールを使用してJSON文書をデコードし、変更する必要がある値を変更してから、再エンコードされたデータ構造を出力します。エラー処理は練習のままです。
2番目のコード部分では、挿入する値がSTRING
Perlコードに環境変数として渡されます。これは、「slurp」モードのファイルからJSON文書を読み取るためです-0777
。