Sed
替換文件中雙引號中的第三個單詞
這是
json
我們要編輯的文件範例 1
{ "topics": [{"topic": "hfgt_kejd_tdsfd”}], "version": 1 }
範例 2
{ "topics": [{"topic": "hfgt_kj_fsrfdfd”}], "version": 1 }
我們想用其他單詞替換該行中的第三個
topics
單詞(通過 sed 或 perl one liner)關於範例 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 }
使用
jq
:$ jq '.topics[0].topic |= "test_1"' file.json { "topics": [ { "topic": "test_1" } ], "version": 1 }
這將讀取 JSON 文件並將
topic
數組的第一個元素的條目的值修改topics
為 stringtest_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:
$ 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}
這兩者都使用 Perl
JSON
模組對 JSON 文件進行解碼,更改需要更改的值,然後輸出重新編碼的資料結構。錯誤處理留作練習。對於第二段程式碼,要插入的值作為環境變數 傳遞
STRING
到 Perl 程式碼中。這是由於在“slurp”模式下使用-0777
.