复习:一行一行读取到模式空间,操做完后读取到屏幕上去,知足条件的就执行命令,不知足条件的默认也会显示。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的命令。*/