[英]How do I grep and replace string in bash
我有一個包含我的 json 的文件
{
"type": "xyz",
"my_version": "1.0.1.66~22hgde",
}
我想編輯鍵 my_version 的值,並且每次用另一個存儲在變量中的數字替換第三個點之后的值,這樣它就會變成 1.0.1.32~22hgde 之類的東西。 我正在使用 sed 來替換它
sed -i "s/\"my_version\": \"1.0.1.66~22hgde\"/\"my_version\": \"1.0.1.$VAR~22hgde\"/g" test.json
這是有效的,但問題是 my_version 字符串不會保持不變,它可以更改並且字符串可以是這樣的 1.0.2.66 或 2.0.1.66。 那么我如何在 bash 中處理這種情況呢?
我如何處理這種情況?
您編寫一個正則表達式來匹配可能存在的任何可能的字符組合。 您可以通過在線正則表達式填字游戲有趣地學習正則表達式。
不要使用sed
編輯 JSON 文件 - sed
用於行。 考慮使用 JSON 感知工具 - 如jq
,它將處理任何可能的情況。
一個jq答案: file.json
contains
{
"type": "xyz",
"my_version": "1.0.1.66~22hgde",
"object": "can't end with a comma"
}
然后,替換波浪號之前的最后一個八位字節:
VAR=32
jq --arg octet "$VAR" '.my_version |= sub("[0-9]+(?=~)"; $octet)' file.json
產出
{
"type": "xyz",
"my_version": "1.0.1.32~22hgde",
"object": "can't end with a comma"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.