sed - 使用 sed 进行多行搜索
问题描述
我需要在配置文件中添加几行。格式如下:
[Topic1]
param=foo
param=bar
param=foobar
[Topic2]
param=one
param=two
ETC...
我正在尝试使用 sed 编写脚本以将参数附加到特定主题。由于所有主题都有param=
,我不能只在该字符串的最后一次出现之后插入一行。另外,我不能指望最后一个参数的值是一致的,所以例如我不能只在字符串之后插入一行param=two
任何帮助,将不胜感激。我对 mutliline sed-fu 不太熟悉。谢谢!
解决方案
sed -i -r ':a; N; $!ba; s/\[Topic1\]\n(param=[a-zA-Z]*\n)*/¶m=VALUE\n/g' FILE_NAME
基本上:a; N; $!ba;
所做的是将所有行当不是最后一行 ( N
) 附加到由创建的标签中,:a
以便我们可以\n
在表达式中使用。
然后匹配 [Topic1] 后跟任意数量的 param=xxx,并将 param=VALUE 附加到匹配结果的末尾(&
)。
推荐阅读
- cassandra - Datastax java 驱动程序 4.5 tinkerpop 依赖项
- google-apps-script - 当特定值出现在一行或整个工作表中时发送电子邮件
- react-native - 如何转到 FlatList 中的特定项目(索引)
- c# - ASP.NET Core 3.1 中的本地化
- azure - Blazor Azure B2C 获取 ClaimType newUser 重定向
- css - 对齐 flexbox 组件 flex-start 但在容器内居中
- haskell - 使用中缀运算符在 do 块内缩进
- javascript - 将 HTML 侧边栏转换为 JS 侧边栏
- java - 将图库照片复制到我的应用程序的文件夹中
- android - setOnClickListener 不适用于 Android Kotlin 中的按钮