使用sed的多行搜索

时间:2019-02-08 18:41:42

标签: sed

我需要在配置文件中添加几行。格式如下:

[Topic1]
param=foo
param=bar
param=foobar

[Topic2]
param=one
param=two

等...

我正在尝试使用sed编写脚本以将参数附加到特定主题。由于所有主题都有param=,因此我不能只在最后一次出现该字符串之后插入一行。另外,我不能指望最后一个参数的值是一致的,例如,我不能只在字符串param=two

之后插入一行

任何帮助将不胜感激。我对mutliline sed-fu不太熟悉。 谢谢!

1 个答案:

答案 0 :(得分:0)

sed -i -r ':a; N; $!ba; s/\[Topic1\]\n(param=[a-zA-Z]*\n)*/&param=VALUE\n/g' FILE_NAME

:a; N; $!ba;的基本操作是将不是最后一行(N)的所有行都附加到:a创建的标签中,以便我们可以在表达式中使用\n

然后匹配[Topic1],后跟任意数量的param = xxx,并将param = VALUE附加到匹配结果的末尾(&)。