linux - 匹配一个模式并在模式前删除 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 删除文件中的这些行,请您建议最好的方法。
解决方案
一种选择是使用tac
并且sed
像这样:
tac file | sed '/air service=plane/,+3d' | tac
要保存更改,请使用临时文件:
tac file | sed '/air service=plane/,+3d' | tac > tmpfile && mv tmpfile file
推荐阅读
- python - Tensorflow 中是否有任何方法可以从 4D 向量制作 2D 向量?
- vb.net - 无效的对象名称“ItemList”。错误 RD = RC.ExecuteReader
- vue.js - 具有多模块的 vue3 异步组件
- error-log - 找不到目录 C#
- sql - 使用 ORDER BY 或基于其他列的更高值更新选定列
- azure-devops - VSBuild 任务找不到 vsVersion ='14.0'
- sql - cursor.execute(""" UPDATE SET sqlite3.OperationalError: near "WHERE": 语法错误
- python - 一旦程序启动,SocketCAN CAN 总线仲裁丢失错误就会增加
- javascript - 插入后将功能策略设置为 iframe
- python - Faust-Streaming 崩溃并出现错误“未分配分区”