我的文件内容如下
# 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
答案 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
用于进行过滤。