sed 在另一个特定模式匹配后替换模式?

问题描述

我有一个文件有多个相似的模式,每个模式都由前面几行的唯一标题分隔。

在此示例中,我只想在 pattern 之后匹配/替换 header3 字符串:

header1
a
b
pattern
c

header2
a
b
c
d
pattern

header3
a
pattern
b
c
d

在我的实际文件中,可能有任意数量标题字符串,以及任意数量的行。因此,无法定义 header3 匹配之前或之后的行数。

(另外,这台机器没有可用的 gnu sed 二进制文件,所以这不是一个可以使用的选项。)

解决方法

我使用地址范围找到了我自己问题的答案:

sed -i -r '/header3/,/pattern/ s|pattern|replacement|' filename