匹配模式,并删除模式前的3行以及匹配的模式行

时间:2019-05-08 10:51:49

标签: linux bash awk sed grep

试图删除文件中的4行。 首先要删除模式匹配行,还需要在模式匹配前删除3行。

Eg:
1.land service=bus
2.land service=car
3.land service=truck
4.land service=cycle
5.
6.air service=plane
7.air service=rocket

我的模式匹配项位于第6行(即:air service = plane),因为我需要删除该行的6,5、4和3。

My output looks like.
1.land service=bus
2.land service=car
3.air service=rocket

尝试以下代码:     grep -B2'air service = plane'pattern.txt | sed -n'1,3p'

我正在尝试使用sed和awk删除文件中的这些行,请您告诉我这样做的最佳方法。

2 个答案:

答案 0 :(得分:2)

一个选项正在使用tacsed,如下所示:

tac file | sed '/air service=plane/,+3d' | tac

要保存更改,请使用一个临时文件:

tac file | sed '/air service=plane/,+3d' | tac > tmpfile && mv tmpfile file

答案 1 :(得分:0)

尝试一下:

tac yourfile.txt | sed "/air service=plane/{N;N;N;d}" | tac

说明:

tac yourfile.txt               # reverse file

sed "/air service=plane/       # find pattern
{N;N;N;d}"                     # concatenate next 3 lines (N) and delete (d)

tac                            # reverse output

输出

1.land service=bus
2.land service=car
7.air service=rocket