如何删除与特定事件模式匹配的行?

时间:2011-07-21 06:58:42

标签: bash

这里我想删除与之匹配的行  <li><p><a href="anti\/recent.html">第四次出现

我之前问过,但有点不同,那时我只需要与<ul>匹配

那时我得到答案:

    awk '/<ul>/ {ul++} ul == 6 { getline } 1' file

但是,这不能应用于<li><p><a href="anti\/recent.html">

在另一篇文章中我得到了另一个答案:

awk '/<li><p><a href="anti\/recent.html">/ {a++} a == 4 { getline } 1' file
awk似乎有一些bug

^I^I^I^I^I^I^I^I^I<li><p><a href="anti/recent.html">4 Jul 2011 - Fraudulent email purporting to be related to Standard Chartered Bank (Hong Kong) Limited</a></p></li>$
                                      <!--<li>There is no phishing attack at this  moment.</li>-->$
^I^I^I^I^I^I^I^I    </ul>$

例如它会删除</ul>,尽管它位于不同的行上?

它以某种方式工作,因为它删除了第四个项目,但之后它删除了这么多行(~40行)(这与<li><p><a href="anti\/recent.html">完全无关。原因是什么?谢谢

1 个答案:

答案 0 :(得分:1)

awk '/<li><p><a href="anti\/recent.html">/ {a++} a == 4 { getline } 1' file

当“a”等于4时,即使它们与模式不匹配,也会删除任何行。你必须结合(“和”)条件:

awk '/<li><p><a href="anti\/recent.html">/ && ++a == 4 {next} 1' file