首页 > 解决方案 > 匹配一个模式并在模式前删除 3 行以及匹配的模式行

问题描述

试图删除文件中的 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 行。(即:空中服务 = 飞机)基于我需要删除第 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 删除文件中的这些行,请您建议最好的方法。

标签: linuxbashawksedgrep

解决方案


一种选择是使用tac并且sed像这样:

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

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

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

推荐阅读