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 @ 2023-09-25 22:45  小鲨鱼2018  阅读(48)  评论(0编辑  收藏  举报