簡體   English   中英

我如何在 bash 中 grep 和替換字符串

[英]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 ,它將處理任何可能的情況。

一個答案: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM