文本三剑客之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

相关推荐

  • 加密解密基础、OpenSSL通信 及 搭建私有CA (Blog 11)

    加密解密技术基础、PKI及创建私有CA

    2017-11-29
  • N26-第五周作业-邢岩

    马哥门徒-N26-邢岩    我要继续今天的博客,《一万小时天才理论》里提到了髓鞘质,我是不是正在慢慢的给自己包裹一层髓鞘质呢?如果还没有,那么继续吧。    第一题:显示当前系统上root、fedora或user1用户的默认shell。      ~]# grep -E &#8…

    2017-02-24
  • 课堂练习及课后作业(0805文本处理工具)

    课堂练习: 1、找出ifconfig命令结果中本机的所有IPv4地址 2、查出分区空间使用率的最大百分比值 3、查出用户UID最大值的用户名、UID及shell类型 4、查出/tmp的权限,以数字方式显示 5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序 grep 1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式…

    Linux干货 2016-08-07
  • M20 – 1- 第三周博客:Linux中的权限以及特殊权限

    上一篇讲到了用户与用户组,相信大家都明白了Linux中用户与用户组的含义和用处,那接下来讲的就是Linux中设置用户与用户组有使用权限。 Linux用户权限 何为权限,权限(privilege)是指某个特定的用户具有特定的系统资源使用权力,而权限又有哪几种呢。 Linux用户中主要针对三类着三种权限:读、写、执行,而Linux中存在着目录与文件,而目录的权限…

    Linux干货 2016-08-08
  • linux终端的类型与linux发展历史

    一、linux console的类型与说明 说明:        1 由于虚拟终端的实现,人们可以多用户多任务的在一台计算机操作系统上工作             2 在80或90年代的旧电脑上,人们只能用分屏这样的方法来实现多用户,多任务的工作  …

    Linux干货 2016-11-03
  • 网络基础

    网络小白一个,针对网络的基础知识无从下手,因此本文引用了鸟哥私房菜中的众多概念性知识,在此谢过,本文主要从OSI七层协议,TCP协议和一些网络中专业词汇进行解析,并通过子网掩码的划分,网络接口的配置、路由配置等实例来加深对网络的理解。 一、OSI七层协议:     OSI七层协议的由来:   由于网络链接过程…

    Linux干货 2016-09-07