文本三剑客之sed

文本处理三剑客之sed

sed 本身也是一个管线命令,是一个(流|行)编辑器! 而且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能。工作模式是从源文件中一次读取一行,存储到sed自己的内存中进行处理,如果模式被匹配到就可以编辑并且输出到标准输出,如果没有被匹配到则直接输出到标准输出。

    sed [OPTION]… script [input-file]…

    常用选项:

    -n:不输出模式空间中的内容至屏幕;

    -e:多点编辑;可以同时指定多个编辑命令

    [root@ali ~]# cat /etc/fstab  |sed -e 's/^#[[:space:]]*//g' -e '/^UUID/d'

    -f:/path/to/sed_script_file 每行一个编辑命令;

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

    -i:原处编辑:直接编辑原文件(危险命令)

        提示:任何情况下修改和删除之前先备份


    地址定界:

        (1)空地址:对全文进行处理;

        (2)单地址:

        #:指定行;

        /pattern/:被次模式所匹配到的每一行;

        (3)地址范围

        #,#:

        #,+#:

        #,/pat1/

        /pat1,/pat2

        $:最后一行

        (3)步进:~

        1~2:所有奇数行

        2~2:所有偶数行


    编辑命令:

        d:删除

        [root@ali ~]# nl /etc/fstab |sed '1,5d'

         5 # Accessible filesystems, by reference, are maintained under '/dev/disk'

         6 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

         (删除了第一到第五行的内容)

         p:显示模式空间中的内容

         a:\text:在行后面追加文本"text",支持使用\n实现多行追加;

         i:\text:在行后面插入文本"text",支持使用\n实现多行插入;

         c\text:把匹配刀到的行替换为此处指定的文本“text”

         w/path/to/somefile:保存模式空间匹配到行至指定的文件中

         r/path/from/somefile:读取指定文件的内容至当前文件被模式匹配到的行后面;实现文件合并        

         =:为模式匹配到的行打印行号

         !:条件取反(语法顺序 地址定界!编辑命令)   

         s///:查找替换,其分隔符可自行指定,常用的有s@@@,s@@@

         替换标记:

         g:全局替换

         w/path/to/somefile:将替换成功的结果保存至指定文件中

        p:显示替换成功的行


    高级编辑命令和示例

        h:把模式空间中的内容覆盖至保持空间中

        H:把模式空间中的内容追加至保持空间中

        g:把保持空间中的内容覆盖至模式空间中

        G:把保持空间中的内容追加至模式空间中

        x:把模式空间中的内容与保持空间中的内容互换

        n:覆盖匹配到的行的下一行至模式空间中

        N:追加匹配到的行的下一行至模式空间中

        d:删除模式空间中的行

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

        示例:

         sed -n 'n;p'file:显示偶数行

         sed '1!G;h;$!d'file:逆序显示文件内容,tac表示不服

         sed '$!d' file:取出最后一行;tail -n1 表示不服

         sed '$!N;$!D' file:取出文件最后两行;tail -n2表示不服

         sed '/^$/d;G' file:删除原有的所有空白行后,而后为所有的非空白行添加一个空白行

         sed 'n;d' file:显示奇数行;

         sed 'G' :在原有的每行后方添加一个空白行


原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/32244

赞 (0)
M20-1马星M20-1马星
上一篇 2016-08-10 13:58
下一篇 2016-08-10 13:58

相关推荐

  • linux-系统自动化安装

    一、安装程序及配置 CentOS 系统安装 系统启动流程: bootloader–>kernel(initramfs)–>rootfs–>/sbin/init anaconda: 系统安装程序 tui:  基于图形库curses 的文本 窗口 gui :图形窗口 安装程序启动过程 MB…

    Linux干货 2016-09-26
  • 马哥教育网络班21期-第6周课程练习

    第6周课程练习 请详细总结vim编辑器的使用并完成以下练习题   1、         复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; # cp /etc/rc.d/rc.s…

    Linux干货 2016-08-30
  • wed服务基础·httpd基础配置详解

    一、 Web Service基础: service:计算机后台提供的功能或计算机可以提供的某一种功能 Web Service本质:通过网络调用其它网站的资源 根据来源的不同,分为两种服务: 本地服务:使用同一台机器提供的服务,不需要网络 网络服务:使用另一台机器提供的服务,需要网络   IANA互联网地址授权机构(Internet Assigned…

    2017-06-09
  • 习题

    1.当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作? 2.当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做哪些操作? 3.当用户wangcai 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除? 4.复制/etc/fstab文件到/var/tmp下,设置文件所有者为wa…

    Linux干货 2016-08-04
  • 马哥教育网络班第21期+第六周课程作业

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的1、以至少一个空白字符开头的行的行首加#; :%s@^[[:space:]]\+@#@   2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; :%s@^[[:space…

    Linux干货 2016-08-22
  • Linux中正则表达式和grep的使用

    正则表达式在Linux经常配合grep,sed和awk等用于搜寻关键字。正则表达式分为正则表达式和扩展正则表达式: 一、正则表达式 1.1 元字符: .:匹配任意字符    []:匹配[]中的任意一个字符 [^]:匹配[]以外的任意字符 [:alpha:]大小写英文字母 [:digit:]:十进制数字 [:xdigit…

    Linux干货 2017-04-08