Sed/Awk:当多行出现相同模式时触发?

Sed/Awk:当多行出现相同模式时触发?

想象一下有一个文本文件。您想知道此文件中是否有相同的模式(例如<br>)连续出现 N 行,您需要删除前 3 行和后 3 行。我想我可以弄清楚如何执行此删除部分,但我不知道如何实现此模式魔法。

非常适合可视化:

Foo <br>
Bar <br>
Baz <br>
<br>

是文件中基本一致的模式。但有时,出现一些内容必须删除,以便之后可以很好地处理文件:

1 Not good Foo <br>
2 <br>
3 <br>
4 <br>
5 Dirt <br>
6 <br>

我添加了行号。

它与非肿瘤模式的不同之处仅在于有几个连续的断裂。因此,如果我们在第 3 行中意识到这是一个肿瘤片段,那么我们要删除第 1 行到第 6 行。

所以,结论是:每当我看到<br>连续 2 行时,删除前 2 行、当前行和后 3 行。

答案1

如果我正确地阅读了您的要求,您应该通过在 Vim 中打开文件然后输入以下内容来获得您想要的结果:

:g/^<br>\n<br>$/-1,+4d

然后按“Enter”。

ex如果必须编写脚本,您也可以这样做。


例子:

前:

Some line
Not good Foo <br>
<br>
<br>
<br>
Dirt <br>
<br>
Some additional line

后:

Some line
Some additional line

相关内容