码迷,mamicode.com
首页 > 其他好文 > 详细

sed命令

时间:2017-12-29 20:06:27      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:sed命令的使用

sed:流编辑器:

    sed是一种在线编辑器,他一次只能处理一行内容,在处理文件时,把当前处理的行存储到临时缓冲区,我们称为 模式空间 ,接着sed会处理模式空间中的文本,然后发送到标准输出,如果匹配不成功,则默认发送到标准输出,然后处理下一行,直到文件末尾。


sed格式:

       sed [OPTION]... 'script' [input-file]...

option

                -n, --quiet, --silent:对于不能被PATTERN匹配的行,不发往标准输出;

[root@localhost ~]# sed 'p' b.txt     #'p' 用来标准输出
aaaa
aaaa
bbbb
bbbb
	aaaa
	aaaa
cccc
cccc
 dddd
 dddd
 
 [root@localhost ~]# sed -n 'p' b.txt
aaaa
bbbb
	aaaa
cccc
 dddd


                -e script, --expression=script:多条件编辑;

                -f script-file, --file=script-file:从指定的script-file中读取脚本内容再编辑;

我们编辑a.txt的内容为 n
[root@localhost ~]# sed --file=a.txt b.txt
aaaa
bbbb
	aaaa
cccc
 dddd


                注意:script-file最好使用绝对路径来指定;

                -i[SUFFIX], --in-place[=SUFFIX]:直接编辑源文件;

                r, --regexp-extended:可以使sed支持扩展正则表达式;


script:AddressesCommand

            Addresses:地址定界

            1.空地址:表示对指定文件的所有行进行编辑处理;

            2.单地址:sed对于能够匹配该地址的唯一一行进行处理;

                    #:表示指定行号的那行;

[root@localhost ~]# sed -n '2p' b.txt
bbbb

                    /PATTERN/:能够被PATTERN匹配的所有行 ;

[root@localhost ~]# sed -n '/aaaa/p' b.txt
aaaa
	aaaa


                    $:表示指定文件的最后一行;sed不支持$-1;

[root@localhost ~]# sed -n '$p' b.txt
 dddd


            3.地址范围:

                    addr1,addr2:addr1和addr2都表示行号,从addr1行开始到addr2行结束的中继的所有行,包括addr1和addr2;

[root@localhost ~]# sed -n '1,2p' b.txt
aaaa
bbbb


                    first~step:first和step都数字,从first行开始,以step为步长,所经过的所有行;例如:1~2或2~2

[root@localhost ~]# sed -n '1~2p' b.txt
aaaa
	aaaa
 dddd


                    addr1,+N:从addr1行开始,向后查找N行,包括addr1行;

[root@localhost ~]# sed -n '1,+2p' b.txt
aaaa
bbbb
	aaaa


                    addr1,~N:从addr1行开始,向后查找addr1*N行,包括addr1行;

[root@localhost ~]# sed -n '1,~4p' b.txt
aaaa
bbbb
	aaaa
cccc


                    /PATTERN1/,/PATTERN2/:

                    从被PATTERN1第一次匹配的行开始,到被PATTERN2第一次匹配的行结束;继续向后找第二次匹配的行,第三次匹配的行,...

[root@localhost ~]# sed -n '/^aa/,/^bb/p' b.txt 
aaaa
bbbb
aaaa
cccc
bbbbb


            Command:

                    =:显示被PATTERN匹配的行的行号;

                    a \text:在被模式匹配的行之后追加text的内容;支持使用"\n"换行,从而实现追加多行信息;

[root@localhost ~]# sed  '1a \shanchu' b.txt
aaaa
shanchu
bbbb
	aaaa
cccc
 dddd
aaaa
cccc
bbbbb

在第一行后面一行添加shanchu语句

                    i \text:在被模式匹配的行之前插入text的内容;支持使用"\n"换行,从而实现插入多行信息;

                    c \text:将被模式匹配的行直接修改为text的内容;支持使用"\n"换行,从而实现修改原内容为多行信息;

[root@localhost ~]# sed  '1c \shanchu' b.txt
shanchu
bbbb
	aaaa
cccc
 dddd
aaaa
cccc
bbbbb
将第一行修改为shanchu


                    d:在模式空间中删除被模式匹配的行;

                    注意:一般在使用d命令时,不建议使用-n选项;

将第一行删除
[root@localhost ~]# sed  '1d' b.txt
bbbb
	aaaa
cccc
 dddd
aaaa
cccc
bbbbb
若添加-n选项则无法看到输出结果
[root@localhost ~]# sed -n '1d' b.txt
[root@localhost ~]#


                    p:将模式空间中被模式匹配的行发送到标准输出;

                    注意:一般在使用p命令时,建议使用-n选项;

                    w filename:filename可以是一个相对路径,也可以是一个绝对路径;w命令将模式空间中被PATTERN匹配的行,存储到指定的文件中;

                    注意:一般在使用w命令时,建议使用-n选项;

                    r filename:filename可以是一个相对路径,也可以是一个绝对路径;r命令将指定的文件内容添加至被PATTERN匹配的行的后面;

                    !Command:在模式空间中被PATTERN匹配的行,不执行Command;相反,没有被PATTERN匹配的行,会执行Command;

                    s///:查找并替换,分隔符可以随意更换,但必须保持一致;s@@@, s###, s''', ...

                    s/regexp/replacement/[control]

                    regexp:正则表达式,也就是PATTERN,计划查找并替换的内容就是能够被regexp匹配的内容;

                    replacement:要替换的结果,纯字符串;

                    支持后向引用:

                    s/\(string\)/&/

                    s/\(string\)/\1/

替换::
[root@localhost ~]# sed  '1s/^aa/ww/' b.txt
wwaa
bbbb
	aaaa
cccc
 dddd
aaaa
cccc
bbbbb
将第一行行首的aa修改为ww


            高级编辑命令:

                    h:将模式空间中的内容存储到保持空间中,并覆盖保持空间中原有内容;

                    H:将模式空间中的内容存储到保持空间中,并追加至原有内容之后;

                    g:从保持空间取出数据存储到模式空间中,并覆盖模式空间的原有内容;

                    G:从保持空间取出数据存储到模式空间中,并追加至原有内容之后;

                    x:将模式空间中的内容与保持空间中的内容交换;

                    n:读取被PATTERN匹配到的行的下一行,覆盖到模式空间;

                    N:读取被PATTERN匹配到的行的下一行,追加到模式空间;

                    D:删除模式空间中的所有行;






sed命令

标签:sed命令的使用

原文地址:http://blog.51cto.com/wangchaode/2055956

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!