linux sed学习总结

linux三大基本文本处理器:grep,sed(流编辑器),awk

sed 基本用法
sed:stream editor;用来操作纯ascii码文件,行编辑器(全屏编辑器:vi编辑器)
sed:模式空间;sed把符合条件的读入模式空间;默认不编辑源文件,仅仅对模式空间的文本行进行处理。对文件本身不做处理;
    最终打印:打印出模式空间中的经过处理后剩下的文本;

#man sed
sed [option] 'AddressCommand' file...
    -n:静默模式,只显示符合条件的行;
    -i:直接修改源文件;会修改到原文件,注意;
    -e script -e script:同时执行多个脚本;
    -f /path/to/scriptfile:执行这个文件中的脚本语句;
        sef -f /path/to/scripts file;


    Address:地址行;Command:命令
    sed 'AddressCommand ' file ...

Address:地址指定:
    1、StartLine,EndLine;比如:1,100;从第一行到100行;
    2、/REGEXP/:使用正则表达式来指定模式;
      /^root/:找出所有行中以root开头的行;
    3、/pattern1/,/pattern2/:表示第一次被模式一匹配到的行开始到第一次被pattern2匹配到的行结束,中间的所有行;
    4、LineNumber:精确的某一行,指定的行;
        $:表示最后一行;
    5、StartLine, +N;从startline开始,向后N行,总共N+1行;

Command:命令
    d:删除符合条件的行;
    eg:[root@iZ233y80y23Z ~]# sed "1,2d" /etc/fstab //删除/etc/fstab文件中的1,2行;
        #删除从第三行到最后一行
        [root@iZ233y80y23Z ~]# sed '3,$d' /etc/fstab 
        #所有包含vdb的行都删除
        [root@iZ233y80y23Z ~]# sed '/vdb/d' /etc/fstab 

    p:显示符合条件的行:sed显示的模式空间中处理后的行;配合-n使用不然会有问题,会打印两次符合条件的行;
    eg:
        #显示这种文件中以斜线开头的行
            [root@iZ233y80y23Z ~]# sed '/^\//d' /etc/fstab 
            [root@iZ233y80y23Z ~]# sed -n '/^\//p' /etc/fstab 
            /dev/vdb /home ext3 defaults 0 0
            /dev/vdb /data ext3 defaults 0 0
            /dev/vdb /data ext3 defaults 0 0

    a \"string":在指定的行后面追加新行,内容为string;\n:换行
    eg:
        #在符合/开头的行中后面追加新行
                [root@iZ233y80y23Z ~]# sed -n '/^\//p' /etc/fstab | sed "a \#hello\nworld"
                /dev/vdb /home ext3 defaults 0 0
                #hello
                world
                /dev/vdb /data ext3 defaults 0 0
                #hello
                world
                /dev/vdb /data ext3 defaults 0 0
                #hello
                world

    i \string:在 符合条件的行前面添加新行,内容为string;
    r FILE:将指定的文件的内容添加到符合条件处;
    eg:
        #将指定的文件/etc/issue添加到/etc/fstab中的第二行,插入;文件合并显示;
            [root@iZ233y80y23Z ~]# cat /etc/issue
            \S
            Kernel \r on an \m

            [root@iZ233y80y23Z ~]# sed "2r /etc/issue" /etc/fstab 

            #
            \S
            Kernel \r on an \m

            # /etc/fstab
            # Created by anaconda on Fri Nov 21 18:16:53 2014
            #
            # Accessible filesystems, by reference, are maintained under '/dev/disk'
            # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
            #
            UUID=6634633e-001d-43ba-8fab-202f1df93339 / ext4 defaults,barrier=0 1 1
            /dev/vdb /home ext3 defaults 0 0
            /dev/vdb /data ext3 defaults 0 0
            /dev/vdb /data ext3 defaults 0 0

    w FILE:将指定范围内的内容另存到指定的文件中;
        eg:
            #将/etc/fstab中所有以/开头的行插入到文件data/test/fstab.txt中;
            [root@iZ233y80y23Z ~]# sed '/^\//w /data/test/fstab.txt' /etc/fstab 

    s/pattern/string/:查找并替换,默认每行中第一次被模式匹配的字符串;switch;
    s###,s@@@分隔符只要三个一样就可以;
        加上修饰符
        g:全局替换
        i:忽略字符大小写
        eg:
        #把字符串中的/转化为#
            [root@iZ233y80y23Z ~]# sed 's/\//#/g' /etc/fstab           
            #
            # #etc#fstab
            # Created by anaconda on Fri Nov 21 18:16:53 2014
            #
            # Accessible filesystems, by reference, are maintained under '#dev#disk'
            # See man pages fstab(5), findfs(8), mount(8) and#or blkid(8) for more info
            #
            UUID=6634633e-001d-43ba-8fab-202f1df93339 # ext4 defaults,barrier=0 1 1
            #dev#vdb #home ext3 defaults 0 0
            #dev#vdb #data ext3 defaults 0 0
            #dev#vdb #data ext3 defaults 0 0        

    后向引用:\(\),\1,\2;
    &:引用模式匹配的整个串;
    eg:
        #将文件中的sed.txt中的l..e模式匹配下改为l..er;\(\)后向引用\1
            [root@iZ233y80y23Z ~]# sed 's#l..e#&r#g' sed.txt 
            hello, liker
            hi, my lover        
            [root@iZ233y80y23Z ~]# sed  's#\(l..e\)#\1r#g' sed.txt 
            hello, liker
            hi, my lover
        #history替换行首中的空格去掉;并显示第一行;
        [root@iZ233y80y23Z ~]# history | sed 's#^[[:space:]]*##g' | cut -d' ' -f1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值