如何使用sed删除匹配的行,上面的行和下面的行?

Ben*_*ver 11 regex sed

我在文件中多次出现以下序列:

yyyy
xxxx
zzzz
Run Code Online (Sandbox Code Playgroud)

我有匹配的正则表达式xxxx.每当匹配时,我想删除该行,(例如yyyy)之前的行和它之后的行(例如zzzz).我如何使用sed来做到这一点?

Bea*_*ano 13

诀窍是存储在"保留空间"中看到的最后一行.

sed -n '
/^xxxx/{n
        n
        x
        d
       }
x
1d
p
${x
  p
 }
' <input file>
Run Code Online (Sandbox Code Playgroud)

x- 交换当前输入行与保持空间(x),然后对于第一行不打印任何东西(1d),后续行打印刚从保持空间(p)交换的行,在最后一行交换保持再次空间并打印其中的内容($x{x p}.当我们点击目标线时(开始/^xxxx/)留下该做什么- 将下两行读入模式空间(n n)并将模式空间与保持空间(x)交换- 这留下我们想要打印的下一行的保持空间和匹配前的行的模式空间,这是我们不想要的,所以我们抛弃它(d)