首页 > 解决方案 > 使用 sed 进行多行搜索

问题描述

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

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

[Topic2]
param=one
param=two

ETC...

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

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

标签: sed

解决方案


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 附加到匹配结果的末尾(&)。


推荐阅读