sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间” (pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末 尾。文件内容并无 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操做;编写转换程序等。shell
一下都是对file这个文件进行操做编辑器
文件内容以下spa
a=1
b=2
c=3
z=jxow
a=1
b=2
c=3
z=jxow
a=1
b=2
c=3
z=jxow
a=1
b=2
c=3
z=jxow
server
[root@server1 shell]# sed '1,2d' file #删除第一,二行的内容
c=3
z=jxow
a=1
b=2
c=3
z=jxow
a=1
b=2
c=3
z=jxow
a=1
b=2
c=3
z=jxow
[root@server1 shell]# sed '7,$d' file #删除低七行到末尾的内容
a=1
b=2
c=3
z=jxow
a=1
[root@server1 shell]# sed '$d' file #删除最后一行的内容
a=1
b=2
c=3
z=jxow
a=1
b=2
c=3
z=jxow
a=1
b=2
c=3
z=jxow
a=1
b=2
c=3
字符串
[root@server1 shell]# sed 's/a=1/a=3/' file #替换a=1为a=3,这个只是简单的匹配某一行第一个a=1,后面不会进行匹配,若是想匹配,加上参数g,命令格式如sed 's/a=1/a=3/g' file
a=3
b=2
c=3
z=jxow
a=3
b=2
c=3
z=jxow
a=3
b=2
c=3
z=jxow
a=3
b=2
c=3
z=jxow
test
[root@server1 shell]# sed 's/a=1/&a=2/g' file #&符号表示替换换字符串中被找到的部份
a=1a=2
b=2
c=3
z=jxow
a=1a=2
b=2
c=3
z=jxow
a=1a=2
b=2
c=3
z=jxow
a=1a=2
b=2
c=3
z=jxow
sed
[root@server1 shell]# sed -n '/a=1/p' file #找到行中有a=1,参数n要求显示只是匹配行
a=1
a=1
a=1
a=1
[root@server1 shell]# sed 's#a=1#a=3#g' file #不论什么字符,紧跟着s命令的都被认为是新的分隔符,因此,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把全部a=1替换成a=3file
a=3
b=2
c=3
z=jxow
a=3
b=2
c=3
z=jxow
a=3
b=2
c=3
z=jxow
a=3
b=2
c=3
z=jxow
程序
[root@server1 shell]# sed -n '/a=1/,/c=3/p' file #打印范围a=1到c=3之间的东西,包括本身
a=1
b=2
c=3
a=1
b=2
c=3
a=1
b=2
c=3
a=1
b=2
c=3重定向
[root@server1 shell]# sed -n '3,/a=1/p' file #打印从第三行开始到第一个包含以a=1开始的行之间的全部行。
c=3
z=jxow
a=1
[root@server1 shell]# sed '/c=3/r test' file #显示在与c=3匹配的行后面,若是匹配多行,则test的内容将显示在全部匹配行的下面。
a=1
b=2
c=3
d=4
z=jxow
a=1
b=2
c=3
d=4
z=jxow
a=1
b=2
c=3
d=4
z=jxow
a=1
b=2
c=3
d=4
z=jxow
[root@server1 shell]# sed '/c=3/w test' file #将匹配出来的结果写到文件test里面
[root@server1 shell]# cat test
c=3
c=3
c=3
c=3
[root@server1 shell]# sed '/a=1/{n;s/b=2/b=4/g}' file #-若是file被匹配,则移动到匹配行的下一行,替换这一行的b=2,变为b=4,并打印该行,而后继续。 a=1b=4c=3z=jxowa=1b=4c=3z=jxowa=1b=4c=3z=jxowa=1b=4c=3z=jxow