sed 小结(二)
sed 模式空间和保持空间
定义:
模式空间(pattern space):是sed 软件从文件读取一行文本然后存入的缓冲区,然后使用sed命令操作模式空间的内容。
保持空间(hold space):是sed 软件另外一个缓冲区,用来存放临时数据,Sed可以交换保持空间的数据,但是不能在保持空间上执行普通的sed命令。
初始情况,模式空间和保持空间都是没有内容的。每次循环读取数据的过程中,模式空间的原内容都会被清空写入新的内容,但保持空间的内容保持不变,不会在循环中被删除,除非使用sed命令操作保持空间。
模式空间
n 清空当前模式空间,然后读入下一行 N 不清空当前模式空间,然后读入下一行,以\n分隔两行 ~~~~~~~~~~~~~ 简短举例: [root@CentOS6-M01 test]# sed -n 'p' person.txt 101,oldboy,CEO 102,zhangyao,NB 103,Alex,COO 104,yy,CFO 105,feixue,CIO 106,Alex,COO [root@CentOS6-M01 test]# sed -n 'n;p' person.txt 102,zhangyao,NB 104,yy,CFO 106,Alex,COO ~~~~~~~~~~~~~~~~~~~~~~~~~ [root@CentOS6-M01 test]# sed '=' person.txt 1 101,oldboy,CEO 2 102,zhangyao,NB 3 103,Alex,COO 4 104,yy,CFO 5 105,feixue,CIO 6 106,Alex,COO [root@CentOS6-M01 test]# sed '=' person.txt | sed 'N;s#\n##' 1101,oldboy,CEO 2102,zhangyao,NB 3103,Alex,COO 4104,yy,CFO 5105,feixue,CIO 6106,Alex,COO [root@CentOS6-M01 test]# sed '=' person.txt | sed 'N;s#\n# #' 1 101,oldboy,CEO 2 102,zhangyao,NB 3 103,Alex,COO 4 104,yy,CFO 5 105,feixue,CIO 6 106,Alex,COO 在模式空间内容为: 1\n101,oldboy,CEO 2\n102,zhangyao,NB 3\n103,Alex,COO 4\n104,yy,CFO 5\n105,feixue,CIO 6\n106,Alex,COO ~~~~~~~~~~~~~~~~~~~~~~
小例子: #合并两行为一行 [root@CentOS6-M01 test]# cat test.txt stu1 jfioejif stu2 sjiofeio stu3 sjfieivg stu4 sjfiejgt stu5 sjfinggh [root@CentOS6-M01 test]# sed 'N;s#\n#=#' test.txt stu1=jfioejif stu2=sjiofeio stu3=sjfieivg stu4=sjfiejgt stu5=sjfinggh
保持空间
# 用保持空间替换模式空间内容 x
# 把模式空间的内容复制到保持空间 h
# 把模式空间内容追加到保持空间 H
# 把保持空间内容复制到模式空间g
# 把保持空间追加到模式空间 G
!!!这些只做了解吧。并没有过多研究过
操作多个文件
模拟其他命令
# cat [root@CentOS6-M01 test]# sed '' person.txt 101,oldboy,CEO 102,zhangyao,NB 103,Alex,COO 104,yy,CFO 105,feixue,CIO 106,Alex,COO sed -n 'p' person.txt sed 'n' person.txt sed 'N' person.txt sed 's# # #' person.txt ~~~~~~~~~~~~~~~~~~~~~~ #grep [root@CentOS6-M01 test]# sed -n '/Alex/p' person.txt 103,Alex,COO 106,Alex,COO [root@CentOS6-M01 test]# sed -n '/Alex/ !p' person.txt 101,oldboy,CEO 102,zhangyao,NB 104,yy,CFO 105,feixue,CIO sed '/Alex/d' person.txt ~~~~~~~~~~~~~~~~~~~~~~~~~~ #head [root@CentOS6-M01 test]# sed -n '1,2p' person.txt 101,oldboy,CEO 102,zhangyao,NB [root@CentOS6-M01 test]# sed -n '1,2 !p' person.txt 103,Alex,COO 104,yy,CFO 105,feixue,CIO 106,Alex,COO sed '2q' person.txt sed -n '2p' person.txt ~~~~~~~~~~~~~~~~~~~~~ # wc sed '=' person.txt sed '$=' person.txt sed -n '$=' person.txt
本文来自博客园, 作者:Star-Hitian, 转载请注明原文链接:https://www.cnblogs.com/Star-Haitian/articles/8469524.html

浙公网安备 33010602011771号