簡體   English   中英

sed 如何替換正則表達式字符串

[英]sed how to replace the regex string

我有一個像
"solrHost" : "http://localhost:8983,http://localhost:8764",在一個名為 sample.json 的文件中。 “solrHost”和:之間可能有空格,也可能沒有,並且:和“ http://localhost:8983,http://localhost:8764 ”之間可能有空格

我有另一個變量 newServerName="http://newserver,http://newserver2"

solrHost 的值可以是雙引號之間的任何值,

我想使用 sed 將 solrHost 的值從 old 替換為 newServerName 任何人都可以在這里幫助我嗎?

您最好使用理解 JSON 的工具,而不是試圖將某些東西與sed和正則表達式混在一起。 jq是 JSON 命令行操作的首選:

$ cat foo.json
{
    "solrHost" : "http://localhost:8983,http://localhost:8764",
    "foo": 12
}
$ jq --arg url "http://newserver,http://newserver2" '.solrHost = $url' foo.json    
{
  "solrHost": "http://newserver,http://newserver2",
  "foo": 12
}
sed 's%\("solrHost"[[:space:]]*:[[:space:]]*\)"[^"]*"%\1"'"$newServerName"'"%'
  • 在大部分腳本周圍使用單引號。
  • 使用%而不是/來標記s/// (或s%%% )命令的部分。
  • 使用[[:space:]]*覆蓋空間類中的零個或多個字符。 如果您不關心替代方案(選項卡等),請僅替換為一個空白星,這對於格式良好的 JSON 可能是合理的。
  • 捕獲原始的"solrHost"部分。
  • 替換中的引號要非常小心。
    • "'"$newServerName"'"
    • 第一個雙引號將出現在替換文本中。
    • 第一個單引號終止當前的單引號字符串。
    • 第二個雙引號開始一個新的雙引號字符串。
    • 接下來是替換變量。
    • 第三個雙引號結束雙引號字符串。
    • 第二個單引號開始一個新的(相當短的)單引號字符串。
    • 第四個雙引號將出現在替換文本中。

使用下面的 sed 命令替換文本。

%s/solrHost(old name)/newServerName/g

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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