Linux sed如何替换正则表达式字符串
我有一根像Linux sed如何替换正则表达式字符串,linux,shell,sed,Linux,Shell,Sed,我有一根像 “索尔霍斯特”:http://localhost:8983,http://localhost:8764“,在一个名为sampple.json的文件中。 “solrHost”和:之间可能有空格,也可能没有,而且:和“”之间可能有空格 我有另一个变量 newServerName=”http://newserver,http://newserver2" solrHost的值可以是双引号之间的任何值, 我想使用sed将solrHost的值从old替换为newServerName。这里有人能帮
“索尔霍斯特”:http://localhost:8983,http://localhost:8764“,
在一个名为sampple.json的文件中。
“solrHost”和:之间可能有空格,也可能没有,而且:和“”之间可能有空格
我有另一个变量
newServerName=”http://newserver,http://newserver2"
solrHost的值可以是双引号之间的任何值,
我想使用sed将solrHost的值从old替换为newServerName。这里有人能帮我吗?使用下面的sed命令替换文本
%s/solrHost(old name)/newServerName/g
使用下面的sed命令替换文本
%s/solrHost(old name)/newServerName/g
使用一个理解JSON的工具,而不是试图用
sed
和正则表达式混在一起,这样做会更好很多。是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
}
使用一个理解JSON的工具,而不是试图用
sed
和正则表达式混在一起,这样做会更好很多。是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
}
- 在大部分脚本周围使用单引号
- 使用
而不是%
来标记/
(或s//
)命令的部分s%%
- 使用
覆盖空格类中的零个或多个字符。如果您不关心其他选项(选项卡等),则只需替换为一个空星,这可能是格式良好的JSON所允许的[[:space:][]*
- 捕获原始的
部分“solrHost”
- 要非常小心替换中的引用。
““$newServerName””
- 第一个双引号将出现在替换文本中
- 第一个单引号终止当前单引号字符串
- 第二个双引号开始一个新的双引号字符串
- 接下来是替换变量
- 第三个双引号结束双引号字符串
- 第二个单引号开始一个新的(相当短的)单引号字符串
- 第四个双引号将出现在替换文本中
- 在大部分脚本周围使用单引号
- 使用
而不是%
来标记/
(或s//
)命令的部分s%%
- 使用
覆盖空格类中的零个或多个字符。如果您不关心其他选项(选项卡等),则只需替换为一个空星,这可能是格式良好的JSON所允许的[[:space:][]*
- 捕获原始的
部分“solrHost”
- 要非常小心替换中的引用。
““$newServerName””
- 第一个双引号将出现在替换文本中
- 第一个单引号终止当前单引号字符串
- 第二个双引号开始一个新的双引号字符串
- 接下来是替换变量
- 第三个双引号结束双引号字符串
- 第二个单引号开始一个新的(相当短的)单引号字符串
- 第四个双引号将出现在替换文本中
jq
。使用JSON的规则1:使用理解格式的工具,如jq
。这更多地取决于字段的布局。很有可能它是可以的,但是如果JSON在一行上,那么简单的代码可能会替换错误的信息,而答案中公认的更复杂的代码不会犯这种错误。您是正确的,您肯定需要替换分隔符,例如sed'/^“solrHost”/s@“http.*$@'$newServerName“@”
这更多地取决于字段的布局。很有可能它是可以的,但是如果JSON在一行上,那么简单的代码可能会替换错误的信息,而答案中公认的更复杂的代码不会犯这种错误。您是正确的,您肯定需要替换分隔符,例如sed'/^“solrHost”/s@“http.*$@'$newServerName“'@'
@DavidC.Rankin我想知道是否有一个答案能和JSON的经典答案一样好……我想这就涵盖了它。但是你会遇到一些奇怪的问题,这些问题不是json,但看起来确实很像。不管是哪种方式,对于那些古怪的json格式的文件,你基本上是在玩俄罗斯轮盘赌,没有类似于jq
的东西,它是格式感知的,并将验证结果。@DavidC.Rankin我想知道是否有一个与json的经典答案一样好的答案……我认为这涵盖了它。但是你会遇到一些奇怪的问题,这些问题不是json,但看起来确实很像。不管是哪种方式,对于那些古怪的类似json的格式化文件,您基本上是在玩俄罗斯轮盘赌,而没有类似于jq
的东西,这种东西可以识别格式并验证结果。