shell命令sed获取文件指定关键字出现最后位置到最后一行的内容

蓉城居士 2020-06-16 10:02:59
假设文件是test.txt,文件内容如下:
---------------------------------------------------------------------------------
1 Start 2020-01-01 12:20:20
2 Start Job Jobname
3 ssdffff
4 ssddkddd
5 Start 2020-01-01 12:20:50
6 Finish Job Jobname
7 Start 2020-01-01 12:30:10
8 Start Job Jobname
9 ffhkffjkff
10 sshdkhdkdhkd
11 Start 2020-01-01 12:30:30
12 Finish Job Jobname
----------------------------------------------------------------------------
我们需要把加粗部分打印出来
使用如下shell命令可以实现:
cat test.txt|tac|sed -n '1,/Finish Job/p'|sed '$d'|tac
注:cat的作用是将文件内容输出到屏幕
tac的作用是将内容反转,即将内容倒过来显示。
[root@udata tmp]# cat test.txt|tac
12 Finish Job Jobname
11 Start 2020-01-01 12:30:30
10 sshdkhdkdhkd
9 ffhkffjkff
8 Start Job Jobname
7 Start 2020-01-01 12:30:10
6 Finish Job Jobname
5 tart 2020-01-01 12:20:50
4 ssddkddd
3 ssdffff
2 Start Job Jobname
1 Start 2020-01-01 12:20:20

sed -n '1, /Finish Job/p' 的作用是将第 1行和第一次遇到Finish Job的行显示出来
[root@udata tmp]# cat test.txt|tac|sed -n '1,/Finish Job/p'
12 Finish Job Jobname
11 Start 2020-01-01 12:30:30
10 sshdkhdkdhkd
9 ffhkffjkff
8 Start Job Jobname
7 Start 2020-01-01 12:30:10
6 Finish Job Jobname
sed '$d'的作用是去掉最后一行
[root@udata tmp]# cat test.txt|tac|sed -n '1,/Finish Job/p'|sed '$d'
12 Finish Job Jobname
11 Start 2020-01-01 12:30:30
10 sshdkhdkdhkd
9 ffhkffjkff
8 Start Job Jobname
7 Start 2020-01-01 12:30:10
然后再使用tac反转内容
[root@udata tmp]# cat test.txt|tac|sed -n '1,/Finish Job/p'|sed '$d'|tac
7 Start 2020-01-01 12:30:10
8 Start Job Jobname
9 ffhkffjkff
10 sshdkhdkdhkd
11 Start 2020-01-01 12:30:30
12 Finish Job Jobname
得到了我们需要的内容
...全文
2542 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
皇御雷霆 2020-06-17
  • 打赏
  • 举报
回复
如何识别出加粗部分的

18,777

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧