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

时间:2020-07-15 15:39:33

标签: sed

我需要在字符串中用value替换new_value

key:value
key: value
key:  value

获得

key:new_value
key: new_value
key:  new_value

:之后的空格数是任意的。要匹配的正则表达式为key: *value。 如何在这样的字符串中用value替换new_value并保留sed的空格数?

为明确起见,由于不同的键/值,key1:valuekey:value1不匹配,因此此类字符串不会更改。

2 个答案:

答案 0 :(得分:2)

尝试-

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

答案 1 :(得分:0)

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

sed -E 's/^([[:blank:]]*key[[:blank:]]*:[[:blank:]]*)value([[:blank:]]|$)/\1new_value/' file
key:new_value
key: new_value
key:  new_value

这允许在0个或多个空格:

  • key开始之前
  • key:之间
  • :和值之间
  • value之后,在结束之后
  • [[:blank:]]匹配空格或制表符