设为首页 收藏本站
查看: 226|回复: 0

[经验分享] sed命令详解及实例

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-3-3 08:29:22 | 显示全部楼层 |阅读模式
   要想灵活的并按照需要处理文本,我们需要充分的学会并掌握三大文本处理工具,grep、sed(数据流编辑器)、awk(报告文本的生成器)    下面介绍并学习sed命令的基本用法

    sed又名stream editer,是行编辑器(编辑器包括字处理器和文本编辑器),是文本编辑器,是操作纯Ascii码文本的,操作文本是按行进行操作的,逐行处理文本,默认并不直接处理文本本身,操作时是将文本逐行读取到内存中,在内存中处理后并将符合模式匹配到的行显示到屏幕上,内存空间称为sed模式空间。 默认是打印模式空间。   
SYNOPSIS
       sed [OPTION]... {script-only-if-no-other-script} [input-file]...
       sed [OPTION]... 'AddressCommand' file....地址加命令

           $:表示文本中的最后一行
         Option:

            -n:表示静默模式,不显示模式空间中的内容,只与命令相关

            -i:直接修改原文件

            -e script -e script:可以同进执行多个脚本

            -f /path/to/sed_script: 表示读取文件中的脚本对文本进行处理

                sed -f /script file..

            -r:表示使用扩展正则表达式

         Address:

            1、startline,endline,如1,10指从第一行到第10行;

            2、/pattern(regexp正则表达式)/,如/^root/找出以root开头的行

            3、/pattern1/,/pattern2/,表示第一次被模式1匹配到的行和第一次被模式2匹配到的行中间所有的行。

            4、linenumber表示批定的行或特定的行

            5、startline,+N,表示从startline开始后的N行,总共是N+1行;

        Command:

            d:表示删除符合条件的行;

                如:删除/etc/fstab文件中的前四行,如第一行到倒数第二行,则为1,$-1
1
                [iyunv@station01 ~]# sed "1,4d" /etc/fstab



                如:删除包含sys的行               

1
                [iyunv@station01 ~]# sed "/sys/d" /etc/fstab



                如:删除第一行开始向后十行的内容               

1
                [iyunv@station01 ~]# sed "1,+10d" /etc/fstab



                如:只删除第五行则               

1
                [iyunv@station01 ~]# sed "5d" /etc/fstab



            p:表示显示符合条件的行,默认显示模式空间中的一次和命令匹配到的一次,共二次

                如:显示文件中以/开头的行,并只显示符合条件的行               

1
                [iyunv@station01 ~]# sed -n "/^\//p" /etc/fstab



            a \sting:在批定或匹配到的行后面新增一行,内容为string

                如:在/开头的行后新增一行,内容为“# It is a blank line.”               

1
                [iyunv@station01 ~]# sed '/^\//a \# It is a blank line.' /etc/fstab



                 如:在/开头的行后新增两行,内容为“# It is first blank line.”“# It is second  blank line.”
1
                 [iyunv@station01 ~]# sed '/^\//a \# It is first blank line.\n# It is second  blank line' /etc/fstab



            i \sting:在批定或匹配到的行前面新增一行,内容为string
            r filename:表示在指定的行后将指定的文件内容添加进来,用于合并文件内容

            如:将/etc/issue文件的内容添加到/etc/fstab文件的第二行后               

1
                [iyunv@station01 ~]# sed '2r /etc/issue' /etc/fstab



            如:将/etc/issue文件的内容添加到/etc/fstab文件的第一行和第二行后               

1
                [iyunv@station01 ~]# sed '1,2r /etc/issue' /etc/fstab



            w filename:将批定范围内的内容另存至指定的文件中

                如:将包含oot中的文件内容保存到/tmp/oot.tmp文体中,可以使用-n选项

1
                [iyunv@station01 ~]# sed '/oot/w /tmp/oot.tmp' /etc/fstab



            s/pattern(可以用正则表达式的元字符)/string/修饰符:表示查找匹配到的pattern字符串并替换为string,默认是每一行中第一次被模式匹配到的字符串,如需要替换行中被模式匹配到的所有字符串,则需要加修饰符;其中的/可以换成其它的字符,确保一致即可,并且不需要转义,如###,@@@,%%%等

                    g:全局替换修饰符

                    i:查找时忽略大小写

                如:将/etc/fstab中包含小写oot的字符串替换为大写的OOT               

1
                   [iyunv@station01 ~]# sed 's/oot/OOT/' /etc/fstab



                如:将/etc/fstab中以/开头的行中的/替换为#               

1
                   [iyunv@station01 ~]# sed 's/^\//#/' /etc/fstab



                如:将/etc/fstab中的所有/替换为#               

1
                   [iyunv@station01 ~]# sed 's/\//#/g' /etc/fstab



            后向引用:

                \(\):\1,\2 等

                &:表示模式匹配到的整个串

                如找出以l开头e结尾中间是任意两个字符,替换为在其后加r

                    文件内容如下:

1
2
3
                    [iyunv@station01 ~]# cat sed.txt
                     he like.
                     her love.



                    #1)执行结果如下:

1
2
3
4
5
6
7
                    [iyunv@station01 ~]# sed 's%l..e%&r%' sed.txt
                    he liker.
                    her lover.
                    #2)                    
                    [iyunv@station01 ~]# sed 's%\(l..e\)%\1r%' sed.txt     
                    he liker.
                    her lover.



                若要匹配查找字符串中的一部分时,只能使用后向引用,而不能用&

                    如将l..e,like-->Like,love-->Love时,只能用后向引用  
                    执行结果如下:                  
1
2
3
                    [iyunv@station01 ~]# sed 's%l\(..e\)%L\1%' sed.txt      
                    he Like.
                    her Love.



                如将history命令中的执行结果行首空白删除,并取出行号

1
                [iyunv@station01 ~]# history | sed -r 's#^[[:space:]]+##g' |cut -d' ' -f1



练习题:
    1、删除/etc/grub.conf文件中行首的空白字符        
1
        [iyunv@station01 ~]# sed  -r 's#^[[:space:]]+##g' /etc/grub.conf



    2、替换/etc/inittab文件中行中id:3:initdefault:字符串中的3改为6        
1
        [iyunv@station01 ~]# sed 's#\(id:\)[0-9]\(:initdefault:\)#\16\2#g' /etc/inittab



    3、删除/etc/inittab文件中的空白行
1
        [iyunv@station01 ~]# sed '/^$/d' /etc/inittab



    4、删除/etc/inittab文件行中开头的#号
1
        [iyunv@station01 ~]# sed 's/^#//g' /etc/inittab



    5、删除某文件中行首的#及其后面的空白字符
        文件内容如下
1
2
3
        [iyunv@station01 ~]# cat b.txt
        #    It is a blank.
             #It is second blank.



        执行结果:
1
2
3
        [iyunv@station01 ~]# sed -r 's%^#[[:space:]]+%%g' b.txt
        It is a blank.
             #It is second blank.



    6、删除某文件中行首的空白字符及其后的#
        文件内容如5中的文件
1
2
3
        [iyunv@station01 ~]# sed -r 's%^[[:space:]]+#%%g' b.txt  
        #    It is a blank.
        It is second blank.



    7、取出某路径的父目录
1
2
        [iyunv@station01 ~]# echo "/etc/rc.d/rc4.d/S99local" | sed -r 's@(/.*/)[^/]+/?@\1@g'
/etc/rc.d/rc4.d/






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-42916-1-1.html 上篇帖子: 在centos6.5上编译安装httpd-2.4和2.4版本特性介绍 下篇帖子: /bin/sh: line 1: Killed /sbin/depmod -ae -F System.map
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表