Linux
sed 命令替換和寫入
我正在嘗試用包含幾行的文件中的另一個字元串替換以下字元串。
"schema" : "AAAAA",
到
"schema" : "BBBBB",
目前,我正在執行以下命令以獲取帶有“schema”的相應行
目前架構=
cat test.json | grep schema | awk {'print $3'}
它會給我價值“AAAAA”,
我想用 BBBBB 代替 AAAAA
我使用了以下命令
sed -e 's/$currentSchema/BBBBB/p' test.json
但是,它不能在同一個文件中替換。
範例 JSON 文件:
[ { "host": "myhost", "schema": "AAAAA", "lunch": "sandwich" }, { "host": "myotherhost", "schema": "QQQQQ", "lunch": "pizza" } ]
我們想
schema
用AAAAA
.BBBBB
我們可以這樣做jq
:$ jq 'map(if .schema == "AAAAA" then .schema = "BBBBB" else . end)' file.json [ { "host": "myhost", "schema": "BBBBB", "lunch": "sandwhich" }, { "host": "myotherhost", "schema": "QQQQQ", "lunch": "pizza" } ]
如果舊模式無關緊要:
$ jq 'map(.schema = "BBBBB")' file.json [ { "host": "myhost", "schema": "BBBBB", "lunch": "sandwhich" }, { "host": "myotherhost", "schema": "BBBBB", "lunch": "pizza" } ]
因為
jq
它是一個合適的 JSON 解析器,所以即使文件以更緊湊的形式呈現(例如單行)也可以工作[{"host":"myhost","schema":"AAAAA","lunch":"sandwhich"},{"host":"myotherhost","schema":"QQQQQ","lunch":"pizza"}]
對於實際問題(在註釋中),即找到其中
.rules.behavior[]
具有.name
帶值鍵的元素mPulse
,然後將該元素更改.options.apiKey
為其他值:jq '.rules.behaviors = [.rules.behaviors[]|select(.name == "mPulse").options.apiKey = "XXX"]' file.json
也就是說,重寫
.rules.behaviour
數組,使得.name
鍵為的元素mPulse
獲得一個新的.options.apiKey
.