linux 中sed命令输出匹配字符的若干行

 

001、grep实现

复制代码
(base) [root@pc1 test2]# ls
a.txt
(base) [root@pc1 test2]# cat a.txt          ## 测试数据
1
2
keyword
3
4
5
keyword
6
7
8
(base) [root@pc1 test2]# grep "keyword" -A 2 a.txt    ##  输出匹配字符后面的两行
keyword
3
4
--
keyword
6
7
复制代码

 

002、sed实现

复制代码
(base) [root@pc1 test2]# ls
a.txt
(base) [root@pc1 test2]# cat a.txt       ## 测试数据
1
2
keyword
3
4
5
keyword
6
7
8
(base) [root@pc1 test2]# sed -n '/keyword/,+2p' a.txt     ## 输出匹配字符后面的两行
keyword
3
4
keyword
6
7
复制代码

 

003、awk实现

复制代码
(base) [root@pc1 test2]# ls
a.txt
(base) [root@pc1 test2]# cat a.txt       ## 测试数据
1
2
keyword
3
4
5
keyword
6
7
8                                 ## 输出匹配字符及其后的两行
(base) [root@pc1 test2]# awk '{if($0 ~ /keyword/) {idx = "yes"; tmp=NR}; if(NR <= tmp + 2 && idx == "yes") {print $0}}' a.txt
keyword
3
4
keyword
6
7
复制代码

 

004、不包括匹配的关键字,grep + sed实现

复制代码
(base) [root@pc1 test2]# ls
a.txt
(base) [root@pc1 test2]# cat a.txt          ## 测试文本
1
2
keyword
3
4
5
keyword
6
7
8
(base) [root@pc1 test2]# grep "keyword" -A 2 a.txt | grep -v "keyword"   ## 输出关键字后两行,不包括关键字
3
4
--
6
7
复制代码

 

005、不包括匹配的关键字,sed实现

复制代码
(base) [root@pc1 test2]# ls
a.txt
(base) [root@pc1 test2]# cat a.txt       ## 测试文本
1
2
keyword
3
4
5
keyword
6
7
8
(base) [root@pc1 test2]# sed -n '/keyword/,+2{/keyword/b;p}' a.txt   ## 输出匹配字符后边的两行
3
4
6
7
复制代码

 

006、不包括关键字,awk实现

复制代码
(base) [root@pc1 test2]# ls
a.txt
(base) [root@pc1 test2]# cat a.txt     ## 测试文本
1
2
keyword
3
4
5
keyword
6
7
8                                      ## awk实现
(base) [root@pc1 test2]# awk '{if($0 ~ /keyword/) {idx = "yes"; tmp = NR + 2; next}; if(NR <= tmp) {print $0}}' a.txt
3
4
6
7
复制代码

 。

 

posted @   小鲨鱼2018  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2022-09-25 pindel软件的基本用法
点击右上角即可分享
微信分享提示