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

 

posted @ 2018-02-25 15:32  Star-Hitian  阅读(95)  评论(0)    收藏  举报