Sed 替换匹配字符串中的子字符串

Sed 替换匹配字符串中的子字符串,sed,Sed,我需要将值替换为字符串中的新值 key:value key: value key: value 得到 key:new_value key: new_value key: new_value :后面的空格数是任意的。要匹配的正则表达式是键:*value。 如何使用sed保留空格数的字符串中的value替换为new_value 为了澄清,由于键/值不同,key1:value或key:value1不匹配,因此不会更改此类字符串。请尝试- sed 's/^\(key: *\)value/\1ne

我需要将
替换为字符串中的
新值

key:value
key: value
key:  value
得到

key:new_value
key: new_value
key:  new_value
后面的空格数是任意的。要匹配的正则表达式是
键:*value
。 如何使用sed保留空格数的字符串中的
value
替换为
new_value

为了澄清,由于键/值不同,
key1:value
key:value1
不匹配,因此不会更改此类字符串。

请尝试-

sed 's/^\(key: *\)value/\1new_vale/' file
试一试-


您可以使用此
sed
匹配所有情况:

sed -E 's/^([[:blank:]]*key[[:blank:]]*:[[:blank:]]*)value([[:blank:]]|$)/\1new_value/' file
这允许在以下位置使用0个或多个空格:

  • 在开始时按键之前
  • 之间:
  • 介于
    和值之间
  • 值之后
    结束之前
  • [[:blank:][]
    匹配空格或选项卡

您可以使用此
sed
匹配所有情况:

sed -E 's/^([[:blank:]]*key[[:blank:]]*:[[:blank:]]*)value([[:blank:]]|$)/\1new_value/' file
这允许在以下位置使用0个或多个空格:

  • 在开始时按键之前
  • 之间:
  • 介于
    和值之间
  • 值之后
    结束之前
  • [[:blank:][]
    匹配空格或选项卡

没有必要在
g
结尾处:
sed-E'./g'
?但我没有
/g
结尾处,不是我的否决票。回答得好。我在问是否需要“g”来处理所有匹配项,就像通常那样。@user2052436
g
用于处理一行中的多个匹配项。根据您问题中的示例输入,您没有任何情况下一行上有多个匹配项,因此指定
g
没有意义。如果这是错误的,那么,当然,修正你问题中的例子。没有必要在最后加入
g
sed-E'../g'
?但是我没有
/g
,不是我的反对票。回答得好。我在问是否需要“g”来处理所有匹配项,就像通常那样。@user2052436
g
用于处理一行中的多个匹配项。根据您问题中的示例输入,您没有任何情况下一行上有多个匹配项,因此指定
g
没有意义。如果这是错误的,那么,当然,修复问题中的示例。不需要在结尾处添加
g
sed'../g'
?不,这里不需要拖尾
g
。要了解
g
的作用,请尝试以下两个命令:
foo=“aaaa”;echo$foo|sed's/a/X';echo$foo | sed's/a/X/g'
结尾的
g
中不需要:
sed'…/g'
?不需要,此处不需要尾随
g
。要了解
g
的作用,请尝试以下两个命令:
foo=“aaaa”;echo$foo|sed's/a/X';echo$foo|sed's/a/X/g'