《老段带你学sed(下)》笔记

 复习:一行一行读取到模式空间,操做完后读取到屏幕上去,知足条件的就执行命令,不知足条件的默认也会显示。sql

sed语法(续)ide

n 读取下一行,会覆盖模式空间的内容it

[root@mail ~]# cat 3.txt
rOOT
Mysql
Mysql sad
aaaTOM TOM
TOM fds TOM
dddd
TOM
[root@mail ~]# sed -n '2{n;p}' 3.txt  //覆盖第二行的内容显示第三行的内容
Mysql sad
[root@mail ~]# sed -n '1{n;p}' 3.txt
Mysql

N 读取下一行内容,不会覆盖模式空间的内容class

[root@mail ~]# sed -n '1{N;p}' 3.txt   //显示第一行和第二行内容
rOOT
Mysql
[root@mail ~]# sed -n '2{N;p}' 3.txt
Mysql
Mysql sad
[root@mail ~]# cat 3.txt
root ro
ot
Mysql
Mysql sad
[root@mail ~]# sed '{N;s/root/ROOT/g}; {s/ro\not/RO\nOT/g}' 3.txt
//将第一二行当作一行,root换成ROOT
ROOT RO
OT
Mysql
Mysql sad
[root@mail ~]# sed '{N;s/root/ROOT/g}; {s/ro\not/ROOT/g}' 3.txt
ROOT ROOT将第一二行当作一行并显示成一行,root换成ROOT
Mysql
Mysql sad


保持空间,理解为临时仓库,临时存放数据。不作任何操做,全部操做都是在模式空间里作的。
sed

x:让保持空间和模式空间互换file

[root@mail ~]# cat 1.txt
tom
//首先读取第一行内容到模式空间,将模式空间和保持空间的内容互换,保持空间为tom,模式空间为空
jingli
 //将第二行读入模式空间,检测模式空间的内容是不是经理,若是是与保持空间互换
bob
zongjian
lisan
yuangong
zhangsi
jingli
//要求显示职业为经理的人
[root@mail ~]# sed -n -e  'x;n' -e '/jingli/{x;p}' 1.txt
tom
zhangsi
//x互换第一行的模式空间和保持空间,n读取第二行
//判断是否为jingli,是的话就互换保持空间和模式空间,打印输出

h:把模式空间的内容拷贝到保持空间(会覆盖保持空间的内容)
循环

[root@mail ~]# sed -n -e '/jingli/!h' -e '/jingli/{x;p}' 1.txt
tom
zhangsi
//第一行,判断模式空间读取的内容是否是jingli,不是jingli就拷贝到保持空间
//第二行,判断是否是jingli,是的话就互换模式空间和保持空间内容,打印出来

H:把模式空间的内容拷贝到保持空间(追加内容到保持空间)语法

[root@mail ~]# sed -n -e '/jingli/!h' -e '/jingli/{H;x;p}' 1.txt
tom
jingli
zhangsi
jingli
//读取第一行tom,不是jingli拷贝到保持空间
//读取第二行经理,是jingli,将经理追加到保持空间(tom jingli),而后互换模式空间和保持空间,打印出来
[root@mail ~]# sed -n -e '/jingli/!h' -e '/jingli/{p;x;p}' 1.txt
jingli
tom
jingli
zhangsi
//读取第一行tom,不是jingli拷贝到保持空间
//读取第二行经理,是jingli,打印出模式空间内容(jingli),而后互换模式空间和保持空间,打印出来(tom)
[root@mail ~]# sed -n -e '/jingli/!h' -e '/jingli/{H;x;s/\n/:/;p}' 1.txt
tom:jingli
zhangsi:jingli
//将换行\n替换成:

g:将保持空间的内容写入到模式空间(覆盖)数据

G:将保持空间的内容写入到模式空间(追加)di

[root@mail ~]# cat 1.txt
tom
jingli
bob
zongjian
lisan
yuangong
zhangsi
jingli
//将经理和姓名互换
[root@mail ~]# sed -n 'h;n;G;p' 1.txt
jingli
tom
zongjian
bob
yuangong
lisan
jingli
zhangsi
/*
保持空间      模式空间
    空         tom
   tom   h                 tom拷贝到模式空间
   tom    n    jingli      读取下一行
         G     jingli tom  tom追加到模式空间
*/
//只输出用户名
[root@mail ~]# sed -n 'h;n;g;p' 1.txt
tom
bob
lisan
zhangsi


使用标签,能够循环替换

sed ‘;标签 范围 1 命令 1; /模式/b 标签名’file

[root@mail ~]# sed ':xx s/Mysql/MYSQL/; /Mysql/b xx' 3.txt
root ro
ot
MYSQL
MYSQL sad
/*定义xx标签,执行命令为s/Mysql/MYSQL/
/Mysql/b判断是否还有Mysql,有的话就执行标签xx的命令。*/
相关文章
相关标签/搜索