sed如何替换正则表达式字符串

问题描述 投票:0回答:3

我有一个像"solrHost" : "http://localhost:8983,http://localhost:8764",位于一个名为sampple.json的文件中。在“ solrHost”和:之间可能有空格,或者在:和“ http://localhost:8983,http://localhost:8764

之间可能有空格

我还有另一个变量newServerName =“ http:// newserver,http:// newserver2”

solrHost的值可以是双引号之间的任何值,

我想使用sed将solrHost的值从old替换为newServerName,有人可以在这里帮助我吗?

linux bash shell sed
3个回答
2
投票

[使用了解JSON的工具,而不是尝试与sed和正则表达式结合在一起的工具,您会变得更好得多。 jq是JSON的命令行操作的基础:

jq

1
投票
$ 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%%%覆盖空格类别中的零个或多个字符。如果您不关心替代项(制表符等),则只用空白星号代替,这可以用格式正确的JSON来证明。
  • 捕获原始[[:space:]]*部分。
  • 请非常小心替换中的引号。
    • "solrHost"
    • 第一个双引号将出现在替换文本中。
    • 第一个单引号终止当前的单引号字符串。
    • 第二个双引号开始一个新的双引号字符串。
    • 替换变量是下一个。
    • 第三双引号结束双引号的字符串。
    • 第二个单引号开始一个新的(且较短的)单引号字符串。
    • 第四双引号将出现在替换文本中。

0
投票

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

"'"$newServerName"'"
© www.soinside.com 2019 - 2024. All rights reserved.