Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux sed如何替换正则表达式字符串_Linux_Shell_Sed - Fatal编程技术网

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%%
    )命令的部分
  • 使用
    [[:space:][]*
    覆盖空格类中的零个或多个字符。如果您不关心其他选项(选项卡等),则只需替换为一个空星,这可能是格式良好的JSON所允许的
  • 捕获原始的
    “solrHost”
    部分
  • 要非常小心替换中的引用。
    • ““$newServerName””
    • 第一个双引号将出现在替换文本中
    • 第一个单引号终止当前单引号字符串
    • 第二个双引号开始一个新的双引号字符串
    • 接下来是替换变量
    • 第三个双引号结束双引号字符串
    • 第二个单引号开始一个新的(相当短的)单引号字符串
    • 第四个双引号将出现在替换文本中
  • 在大部分脚本周围使用单引号
  • 使用
    %
    而不是
    /
    来标记
    s//
    (或
    s%%
    )命令的部分
  • 使用
    [[:space:][]*
    覆盖空格类中的零个或多个字符。如果您不关心其他选项(选项卡等),则只需替换为一个空星,这可能是格式良好的JSON所允许的
  • 捕获原始的
    “solrHost”
    部分
  • 要非常小心替换中的引用。
    • ““$newServerName””
    • 第一个双引号将出现在替换文本中
    • 第一个单引号终止当前单引号字符串
    • 第二个双引号开始一个新的双引号字符串
    • 接下来是替换变量
    • 第三个双引号结束双引号字符串
    • 第二个单引号开始一个新的(相当短的)单引号字符串
    • 第四个双引号将出现在替换文本中

使用JSON的规则1:使用理解格式的工具,如
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
的东西,这种东西可以识别格式并验证结果。