从上面某行删除文件中的重复条目

时间:2018-01-11 12:28:08

标签: awk sed grep

我的文件内容如下

# Time: 180110 10:48:37
use 65_ebccrmproduction;
SET timestamp=1515561517;
abcdegh
# Time: 180110 10:48:59
SET timestamp=1515561554;
poiuyt
assadd
# Time: 180110 10:49:51
SET timestamp=1515561554;
assddpoiuyt
# Time: 180110 10:49:51
SET timestamp=1515561554;
poiuytassassas

我想grep并删除内容匹配的块

阻止意味着#Time到下一个#Time

之间的内容

例如,我想匹配 poiuyt

然后它将删除下面的行

# Time: 180110 10:48:59
SET timestamp=1515561554;
poiuyt
assadd
# Time: 180110 10:49:51
SET timestamp=1515561554;
poiuytassassas

我有代码sed -n '/poiuyt/{s/.*//;x;d;};x;p;${x;p;}' test.txt | sed '/^$/d'这将删除模式匹配,并且该模式上方有一行,但我的目的与此完全不同。

注意:这也应该删除poiuytassassas

2 个答案:

答案 0 :(得分:2)

Awk 解决方案:

awk '/# Time:/{ 
         if (f && !del){ print lines } 
         lines=$0; del=0; f=1; next 
    }
    f{ 
        lines=lines ORS $0; 
        if (/poiuyt/){ del=1 } 
    }
    END{ if (f && !del) print lines }' file.txt

输出:

# Time: 180110 10:48:37
use 65_ebccrmproduction;
SET timestamp=1515561517;
abcdegh

答案 1 :(得分:2)

sed 's/^# Time:.*/\n&/g' inputfile |awk -v RS= '!/poiuyt/{print $0}'

此处,sed用于正确划分记录,awk用于进行过滤。