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

相关推荐

  • grep 正则表达式 find

    1.显示当前系统上root,fedora 或user1用户的默认shell [root@centos7 ~]# grep -E  “^(root|fedora|user1)” /etc/passwd root:x:0:0:root:/root:/bin/bash fedora:x:2003:2003::/home/fedora:/bi…

    2017-09-18
  • 基于centos7的http的应用

     练习:分别使用CentOS 7和CentOS 6实现以下任务         (1) 配置三个基于名称的虚拟主机;             (a) discuzX             …

    Linux干货 2016-10-12
  • CentOS系统启动流程、selinux、Systemd剖析

    交互式登录配置文件读取顺序: /etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc 非交互式登录配置文件读取顺序: ~/.bashrc –> /etc/bas…

    Linux干货 2018-03-04
  • 用户组和用户权限的使用2

    touch /etc/nologin  echo system is maintanining >> /etc/nologin  可以控制非管理员root之外的所有普通用户不能登陆 7版本里面 cd /run/ touch /run/nologin 效果一样让普通用户不能登陆 ehho weihu > /run/nolo…

    Linux干货 2016-08-04
  • #招聘福利#饿了么/运维核心岗位/上海

    饿了么/运维核心岗位/上海 待遇面谈 具体岗位:         应用运维,核心岗位,负责商家订单系统,有之前的学长带着成长 要求:     1、1-2年以上工作经验,     2、熟悉shell和python,    &nbsp…

    Linux干货 2016-03-18
  • “lnmap实战之负载均衡架构(无高可用)”之新增keepalived高可用

    “lnmap实战之负载均衡架构(无高可用)”之新增keepalived高可用 我之前有一篇”lnmap实战之负载均衡架构(无高可用)“博客是专门部署了lanmap,之前没有做高可用,那么我们现在就把高可用补上去吧 这样我们照着之前的文档从新部署一下 1.机器结构如下: 192.168.42.150 node0 …

    Linux干货 2017-06-25

评论列表(1条)

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

    尽量不要复制粘贴笔记