我在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

10-08 14:15