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

时间:2011-07-21 04:41:07

标签: bash

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

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

那时我得到答案:

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

然而,这不适用于<li><p><a href="anti\/recent.html"> 我试过https://stackoverflow.com/questions/ask

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

返回我的synatx错误。任何人都可以帮忙吗?感谢


错误是:

awk: /<li><p><a href="anti\/recent.html">/ {lipa href="anti\/recent.html"++} lip                                                                                                                               a href="anti\/recent.html" == 4 { getline } 1
awk:                                                 ^ syntax error
awk: warning: escape sequence `\/' treated as plain `/'
awk: /<li><p><a href="anti\/recent.html">/ {lipa href="anti\/recent.html"++} lip                                                                                                                               a href="anti\/recent.html" == 4 { getline } 1
awk:                                                                                                                                                                                                                 ^ syntax error

***继续: 感谢任何帮助过的人 这里的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>,虽然它位于不同的行?

我已编辑并测试:

#!/bin/bash
i=1 cat test2.html | while read -r
do
    if [ "$(echo $REPLY | grep -E '<li><p><a href=\"anti/recent.html\">')" ]
    then
        let i++;
        if [ ! "$i" -eq 4 ]
        then
            echo "$REPLY";
        fi;
    else
        echo "$REPLY";
    fi;
done > test2.html;

这是正确与否?当我执行代码并查看test2.html的结果时,它是一个没有任何内容的页面???没有HTML代码没有文字?谢谢。

1 个答案:

答案 0 :(得分:0)

你必须用awk做吗?如果不是 - 这段代码可能更清楚。

i=1 cat some_file | while read -r
do 
    if [ "$(echo $REPLY | grep -E '<li><p><a href=\"anti/recent.html\">')" ]
    then 
        let i++; 
        if [ ! "$i" -eq 4 ]
        then 
            echo "$REPLY"; 
        fi;
    else
        echo "$REPLY";
    fi;
done > fixed_file;