理解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
。