我在UNIX中具有file1.txt,如下所示
[Section A]
$param1=value1
$param2=value2
[Section B]
$param1=value1
$param2=value2
$param3=value3
我想以编程方式将B部分中的value2编辑为 new_value2
[Section A]
$param1=value1
$param2=value2
[Section B]
$param1=value1
$param2=new_value2
$param3=value3
知道使用sed的unix命令应该是什么吗?
非常感谢。
最佳答案
sed -ie '/^\[Section B\]$/,/^$/s/^\$param2=value2$/$param2=new_value/' foo.txt
编辑:上面的示例对于旧值和空格字符非常严格。我添加另一个可能更合适的示例。 sed脚本由一个命令组成,并以以下地址范围为前缀:
/^\[Section B\]/,/^\[.*\]/
地址范围由两个用逗号分隔的正则表达式组成,并将以下命令限制为从第一个地址匹配的位置开始的行,一直持续到第二个地址匹配(包括)为止的行。
s/^\(\$param2[ \t]*=[ \t]*\).*$/\1new_value/
替换命令使用范围进行实际替换。一切都在一起:
sed -ie '/^\[Section B\]/,/^\[.*\]/s/^\(\$param2[ \t]*=[ \t]*\).*$/\1new_value/' foo.txt