sed命令用法
作者:互联网
[sed命令]
sed 的工作流程主要包括读取、执行和显示三个过程。
- 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
- 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
- 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完
sed的模式空间和保持空间
模式空间:sed处理文本内容行的一个临时缓冲区,模式空间中的内容会主动打印到标准输出,并自动清空模式空间
保持空间:sed处理文本内容行的另一个临时缓冲区,不同的是保持空间内容不会主动清空,也不会主动打印到标准输出,而是需要sed命令来进行处理
sed 命令的使用
追加插入和更改
a追加 //将你要追加的内容追加到第几行
[root@localhost tmp]# cat 123
liu
liuyang
yangliu
[root@localhost tmp]# sed '2aliuyang' 123
liu
liuyang
liuyang
yangliu
i插入 //将 你要插入的内容插入到第几行+
[root@localhost tmp]# cat 123
liu
liuyang
yangliu
[root@localhost tmp]# sed '2iabc' 123
liu
abc
liuyang
yangliu
c修改
[root@localhost tmp]# cat 123
liu
liuyang
yangliu
[root@localhost tmp]# sed '/liu/chello' 123
hello
hello
hello
y 转换,对大小写进行转换
[root@localhost tmp]# cat 123
liu
liuyang
yangliu
[root@localhost tmp]# sed 'y/liuyang/LIUYANG/' 123
LIU
LIUYANG
YANGLIU
p将模式空间的命令进行打印 P输出多行模式的第一部分,直到执行到第一个换行符位为止
//此处有两遍的原因是因为sed命令会打印一次,p命令也会打印一次使用-n抑制默认的输出
[root@localhost tmp]# sed 'p' 123
liu
liu
liuyang
liuyang
yangliu
yangliu
[root@zabbix ~]# cat aaa
hello aaa
hello b aaa
[root@zabbix ~]# sed '/aaa$/{N;/\nhello/{s// b &/;P;D}}' aaa
hello aaa b
hello b aaa
[root@localhost tmp]# sed -n ' p' 123
liu
liuyang
yangliu
n下一步 //匹配以l开头的,然后n是读取到他的下一行,然后d进行删除。所有只有liuyag那一行被删除了
[root@localhost tmp]# cat 123
liu
liuyang
yangliu
[root@localhost tmp]# sed '/^l/{n;d}' 123
liu
yangliu
[root@zabbix ~]# sed '/^l/{N;d}' 123
yangliu
高级sed命令
N追加下一行
[root@localhost tmp]# cat 123
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
available on your system.
[root@localhost tmp]# sed '/Operator$/{N;s/Owner and Operator\n/Installation /g}' 123
Consult Section 3.1 in the Installation Guide for a description of the tape drives
available on your system.
dD多行删除
[root@zabbix ~]# cat 123
This line is followed by 1 blank line.
This line is followed by 2 blank line.
This line is followed by 3 blank line.
This line is followed by 4 blank line.
This is the end.
[root@zabbix ~]# sed '/^$/{N;/^\n$/d}' 123
This line is followed by 1 blank line.
This line is followed by 2 blank line.
This line is followed by 3 blank line.
This line is followed by 4 blank line.
This is the end.
[root@zabbix ~]# sed '/^$/{N;/^\n$/D}' 123
This line is followed by 1 blank line.
This line is followed by 2 blank line.
This line is followed by 3 blank line.
This line is followed by 4 blank line.
This is the end.
h,H //将匹配到的东西放入保持空间中,h复制,H追加
[root@zabbix ~]# cat aa
1
2
11
22
111
222
[root@zabbix ~]# sed '/1/{h;d};/2/{G}' aa
2
1
22
11
222
111
[root@zabbix ~]# sed '/1/{H;d;x}' aa
2
22
222
x //将保持空间的内容与模式空间的内容交换,下条命令本身执行出来的结果应该为2,1在保持空间中,因为前半条命令中已经将匹配到的所有1删掉了,后半条匹配的是2,然后使用x将他们交换
[root@zabbix ~]# cat aa
1
2
11
22
111
222
[root@zabbix ~]# sed '/1/{h;d};/2/x' aa
1
11
111
g,G //将保持空间中的东西追加或复制到模式空间中
[root@zabbix ~]# sed '/1/{g;d};/2/H' aa
2
22
222
[root@zabbix ~]# sed '/1/{h;d};/2/G' aa
2
1
22
11
222
111
标签:tmp,sed,用法,命令,123,line,root,localhost 来源: https://www.cnblogs.com/TQingS/p/16699390.html