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 15:52
下一篇 2017-03-16 16:20

相关推荐

  • 第二周博客作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 文件管理类命令:cp,mv,rm 常用的使用方法: cp命令: 单源复制: cp [OPTION]…[-T] SOURCE DEST 多源复制: cp [OPTION]… SOURCE …DIRECTORY cp [OPTION]… …

    Linux干货 2017-02-06
  • 第二周liunx小总结

    第二周liunx小总结 1.“>” ;”>>”   “>” 把STDOUT重定向到文件    “2>”把STDERR重定向到文件   “&>” 把所有输出重定向到文件* >文件内容会覆盖    set -C: 禁止将内容…

    2017-07-20
  • 1128基于fastDFS,制作rpm包

    基于fastDFS,制作rpm包: 1、安装相应的环境: 1、Development tools 2、git(从外网git仓库下载源码所需) 3、Server Platform Development ———————————&#…

    2016-12-05
  • CentOS6 网络管理之网卡配置及简单路由设置

    CentOS6中关于网络配置的命令有很多,本文将介绍几个平时最长用的几个命令,以及网卡IP地址的配置和简单路由配置。 1、经常使用的查看IP地址命令为 ifconfig,不跟参数的情况下默认查看所有已启用的网卡信息,如下图所示: 如果想查看具体某块网卡信息,则可以在ifconfig后面跟上网卡设备,如只查看eth0的信息则执行:ifconfig eht0 即…

    Linux干货 2016-09-05
  • Week9’s homework

    Week9's homework 1、写一个脚本(1)判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin)(2)分别统计两类用户的个数;通过字符串比较来实现。 #!/bin/bash # for i in $(cat /etc/passwd |…

    Linux干货 2016-12-24
  • 什么是文件系统

    文件系统:层级结构;有索引; /: 原初起点; 倒置树状结构; /dev/pts/2: 最左侧/: 表示根目录 其它的/: 表示路径分隔符 Linux的路径分隔符是/ Windows的是\ 文件的路径表示: 绝对路径:从根开始表示出的路径  相对路径:从当前位置开始表示出的路径 文件名使用法则: 严格区分字符大小写:file1, File1, FI…

    Linux干货 2016-10-29

评论列表(1条)

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

    尽量不要复制粘贴笔记