如何删除最后一个模式匹配+它在行上方

时间:2019-07-19 09:02:14

标签: python sed

在我的文件中,我有这样的图案

always @(clock)
some code here
always @(clock)
some code here
always @(clock)
some code here
my buggy line
always @(clock)

我需要删除最后一条总是行+我的越野车行。 请建议

2 个答案:

答案 0 :(得分:0)

这可能适用于哟(GNU sed):

sed -z 's/\(.*\)\n[^\n]*\nalways @(clock)/\1/' file

将整个文件保存到内存中,并使用贪婪删除包含always @(clock)的最后一行及其前一行。

答案 1 :(得分:0)

这会删除最后的always行以及所有带有buggy的行

tac file | awk '!f && /always/ {f=1;next} !/byggy/' | tac

tac将文件上下颠倒。
删除第一个always,设置标记f并跳到下一个。
如果不是buggy打印行。
tac将其改回正确的方向。

仅使用awk

awk '!/buggy/ {a[++i]=$0} /always/ {f=NR} END  {for (j=1;j<=i;j++) if (j!=i) print a[j]}' file