理解Linux 中sed命令的工作机制

 

001、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                ## 测试数据
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed '' a.txt             ## 说明在默认情况下,sed会原样输出的
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed -n '' a.txt           ## -n选项屏蔽了数据的原样输出

 。

 

002、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                      ## 测试数据
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed -n '/kk/p' a.txt          ## 说明-p会输出匹配的行
03 04 kk
[root@PC1 test]# sed -n '/kk/{n;p}' a.txt      ## 为什么输出了匹配行的下一行。 匹配行为kkk,但是n选项会读入下一行,然后p输出。 (此处的n跟 前边的-n不是一个东西!!!)
05 06

 。

 

003、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                                 ## 测试数据
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed -n '/kk/p' a.txt                      ## -n屏蔽原始数据, p输出匹配行
03 04 kk
[root@PC1 test]# sed -n '/kk/{n;p}' a.txt                  ## n选项读取了下一行放入模式空间,但是只对读取的第二行进行处理
05 06
[root@PC1 test]# sed -n '/kk/{N;p}' a.txt                  ## N选项读取了下一行放入模式空间,会将两行当作一行来处理
03 04 kk
05 06

 。

 

004、

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                ## 测试数据
01 02
03 04 kk
05 06
07 08
09 10
11 12
[root@PC1 test]# sed 'N;p' a.txt       ## 首选输出基础的行,因为没有-n, 然后N每次读入下一行,两行当作一行,p输出,因为没两行重复一次
01 02
03 04 kk
01 02
03 04 kk
05 06
07 08
05 06
07 08
09 10
11 12
09 10
11 12
[root@PC1 test]# sed 'n;p' a.txt      ## 首先输出基础行(如果不是首先输出基础行,则第一行是03 04 kk),然后n读取下一行,但是只把读入的下一行放入模式空间, 因此是没两行处理一次,进输出第二行
01 02
03 04 kk
03 04 kk
05 06
07 08
07 08
09 10
11 12
11 12

 。

 

posted @ 2024-10-29 00:58  小鲨鱼2018  阅读(5)  评论(0编辑  收藏  举报