sed命令的入门与进阶

sed:Stream EDitor

    什么是sed呢?sed被称为linux文本处理三剑客之一,另外两个就是大名鼎鼎的grep和awk。sed是非交互性的流编辑器,在处理文本时一次只读取一行文本,然后基于所给定的编辑脚本对模式空间中的内容做编辑处理并把处理后的结果输出至标准输出。接着处理下一行文本,这样不断重复,直到文件的末尾。sed命令默认不会对原文件做修改,因此你可以使劲的造,而不必担心有什么可怕的后果。

   下面来说说sed命令的用法:

     格式:sed [option]… ‘script’ inputfile…

用法:

    sed [option] ‘addr1,[addr2]编辑命令’ inputfile…

    sed [option] “addr,[addr2]编辑命令” inputfile…

        例:sed -n ‘2d’ /etc/issue

    
          -n:静默模式,不输出模式空间中的内容至标准输出
          -e ‘script’ [-e ‘script’]: 指定多个编辑指令
                    # sed -e ‘/^$/d’ -e ‘s@^#@@’ /etc/fstab
          -f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
                    # sed -f sed.script /etc/fstab
                        将一组命令写入脚本文件中。
                            例:/^$/d/
                                s@^#@@
          -r:使用扩展正则表达式    
          -i:原处编辑(直接修改原文件,你懂的)
      
     地址定界:
             1.不给地址:对全文进行处理
              2.单地址:
                         #:指定行;
                         /pattern/:被此处模式所能够匹配到的每一行;     
              3.地址范围:
                         x,y:表示从x行到y行
                         #,+#:表示从#行到+#行,例:3,+3:表示从第3行到第6行
                         /pat1/,/pat2/:从/pat1/所匹配到的行到/pat2/所匹配到的之间所有的行
                         #,/pat1/:从#行开始,到第一次被/pat1/所匹配到的行结束之间所有的行
              4.~:步进
                        1~2p:显示奇数行
                         例:sed ‘1~2p’ /etc/issue
                        2~2p:显示偶数行
                         例:sed ‘2~2p’ /etc/issue
编辑命令

d:删除模式空间中匹配到的行

例:sed ‘/^UUID/d’ /etc/fstab

p:显示模式空间中的内容(不配合-n选项,默认会显示两遍)

例:sed -n ‘/^UUID/p’ /etc/fstab

a  \text:在匹配到的行后面添加文本;

例:sed ‘/^UUID/a Test line’ /etc/fstab

例:sed ‘/^UUID/a Test line \nsecond line’ /etc/fstab(配合\n可实现多行追加)

i  \text:在匹配到的行前面添加文本;支持使用\n实现多行插入    

例:sed ‘/^UUID/i Test line’ /etc/fstab    

c \text:替换匹配的行为单行或多行文本

例:sed ‘^/UUID/c uuid’ /etc/fstab

w /PATH/TO/FILE:保存模式空间中的内容至指定文件中

例:sed ‘^/UUID/w /tmp/fstab.txt’ /etc/fstab

r /PATH/FORM/FILE:   读取指定文件的内容至模式空间中所匹配到的行后面 

例:sed ‘7r /etc/passwd’ /etc/fstab

=:为模式空间中的行打印行号

例:sed ‘/^\//=’ /etc/fstab

!:对地址定界取反

例:sed ‘/^UUID/!d’ /etc/fstab

s/查找条件/替换为的内容/:支持使用其它分隔符,s@@@,s###
                   替换标记:
                             g:global,行内全局替换
                             i:忽略字符大小写 
                             p:显示替换成功的行
                             w /PATH/TO/FILE:将替换成功的结果保存至指定文件中
                  例:sed ‘s#^UUID#uuid#’ /etc/fstab

                            同时也支持后向引用

                                   例:sed -n ‘s#r..t#&er#p’ /etc/passwd 

高级编辑命令:
     h(hold):把模式空间中的内容覆盖至保持空间中
     H :把模式空间中的内容追加至保持空间中
     g(get):从保持空间取出内容覆盖至模式空间
     G:从保持空间取出内容追加至模式空间
     x:把模式空间中的内容与保持空间中的内容进行互换
     n:读取匹配到的行的下一行覆盖至模式空间
     N: 读取匹配到的的行下一行追加至模式空间
     d:删除模式空间的行
     D:删除多行模式空间中的所有行
     例:

          sed -n ‘n;p’ FILE:显示偶数行

           sed命令的入门与进阶    

          sed ‘n;d’ FILE:显示奇数行

          sed命令的入门与进阶

          sed ‘1!G;h;$!d’ FILE:逆序显示文件内容

          sed命令的入门与进阶

          sed -n ‘1!G;h;$p’ FILE:逆序显示文件内容(和上面的命令是同样的结果)

           sed命令的入门与进阶

          sed ‘$!N;$!D’ FILE:取文件最后两行

          sed命令的入门与进阶

sed ‘$!d’ FILE:取出最后一行

sed命令的入门与进阶

          sed ‘G’    FILE:在行后面增加空白行

          sed命令的入门与进阶

          sed ‘/^$/d;G’ FILE : 把多个空白行合并为一个空白行,并在每一行追加一个空白行

          sed命令的入门与进阶

               
         

原创文章,作者:人字拖,如若转载,请注明出处:http://www.178linux.com/71180

(0)
人字拖人字拖
上一篇 2017-03-16
下一篇 2017-03-16

相关推荐

  • Bash Shell编程初学基础篇之二

    Bash Shell编程初学基础篇之二    时间如白驹过隙,一晃过去了几周,一切的计划都没有变化快。当你制定计划实施时,在这期间却会发生许多打乱我们计划的事情,但是我们还是要坚持下去,胜利是属于坚持到最后的人!实践出真理,中级基本结束了,需要回过头了好好总结一下了。心中总有好多话想找个同行唠唠;不废话了,估计大家都烦了!总有一天,你会成…

    Linux干货 2015-05-11
  • Linux系统的软链接和硬链接

    Linux的链接是一种共享文件和访问它的用户的若干目录项之间建立联系的一种方法。一共分为两种链接,分别是软链接和硬链接。 一、硬链接 1、硬链接的本质上是一个文件,它们除了名字不一样,其他都一样,占用的空间是一个。硬链接会增加文件的链接数。如下图 (1)建立硬链集之前     (2)建立硬链接之后 2、删去一个链接名,链接数减一…

    Linux干货 2016-10-22
  • 10个有用的Linux命令面试问题及答案

    1. 如何暂停一个正在运行的进程,把其放在后台(不运行)? 答案:为了停止正在运行的进程,让其在后台运行,我们可以使用组合键 Ctrl+Z。 2. 什么是安装Linux所需的最小分区数量,以及如何查看系统启动信息? 答案:单独一个/root分区足以执行所有的系统任务,但是强烈建议安装Linux时,需要至少三个分区:/root,/boot,/swap。一个ID…

    2017-09-05
  • iptables 入门

    iptables简单介绍    其实就是大家所熟知的基于命令行的防火墙工具,它使用规则链来允许或是阻止收发报文。当一条网络连接试图在你的系统中建立连接时,iptablels会查找其对应的匹配规则。如果找不到,iptables将对其采取默认的规则。  iptables基本的用法和常用代码 # iptables -vnL …

    Linux干货 2017-03-15
  • 马哥教育30期学员开学典礼

         早上背上书包去学校报到,很有一番学生时期去新学校的感觉,既兴奋又紧张,一段新的人生历程即将开始。      大学时曾经劝说我的同学别逃选修课,我说也许你苦学四年的专业比不上一节选修课对你的将来更有用,如今我却用亲身经历验证了这句话,我是通过大学的一堂选修课了解的Linux系统,开源软件,没想到多年后今天的我竟然也要入这行了。       到教室后,…

    2018-03-26
  • Linux中基础且常用的指令介绍及示例

    首先需要明确的是:Linux中无论是指令还是选项或者参数,请认真对待字母大小写。Linux中通用的命令使用方式是:命令 [选项] [参数] 1. pwd pwd:print name of current/working directory,即打印当前的目录(工作目录),光杆处于哪个目录下就会在终端上输出当前路径的绝对路径。用法示例: [lanti…

    Linux干货 2016-10-30

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-20 09:47

    尽量不要复制粘贴笔记