zoukankan      html  css  js  c++  java
  • 三剑客之SED

    • Sed功能说明
         Sed是Strem Editor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行。
    [root@old ~]# sed --version  #→ sed软件版本
    GNU sed version 4.2.1
    • 命令执行流程
    概括流程:Sed软件从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行……
    模式空间 : Sed软件内部的一个临时缓存,用于存放读取到的内容。
    • 语法格式
         sed [options] [sed-commands] [input-file]
         sed [选项]     [sed命令]      [输入文件]
    说明:
    1. 注意sed和后面的选项之间至少有一个空格。
    2. 为了避免混淆,本文称呼sed为sed软件。sed-commands(sed命令)是sed软件内置的一些命令选项,为了和前面的options(选项)区分,故称为sed命令。
    3. sed-commands既可以是单个sed命令,也可以是多个sed命令组合。
    4. input-file(输入文件)是可选项,sed还能够从标准输入如管道获取输入。
    • 指定执行的地址范围
     
    sed软件可以对单行或多行进行处理。如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
    用法:n1[,n2]{sed-commands}
    地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示。
     
    用法集锦:
       10{sed-commands}               对第10行操作
       10,20{sed-commands}             对10到20行操作,包括第10,20行
       10,+20{sed-commands}        对10到30(10+20)行操作,包括第10,30行
       1~2{sed-commands}             对1,3,5,7,……行操作
       10,${sed-commands}            对10到最后一行($代表最后一行)操作,包括第10行
             /text/{sed-commands}             对匹配text的行操作
             /text/,/Alex/{sed-commands}     对匹配text的行到匹配Alex的行操作
             /text/,${sed-commands}          对匹配text的行到最后一行操作
             /text/,10{sed-commands}        对匹配text的行到第10行操作,注意:如果前10行没有匹配到old,sed软件会显示10行以后的匹配text的行,如果有。
             1,/text/{sed-commands}           对第1行到匹配Alex的行操作
             /text/,+2{sed-commands}          对匹配old的行到其后的2行操作
     
    • 增删改查 功能
         增
         a 追加文本到指定行后
         i 插入文本到指定行前
         单行增加
         例:
     
        [root@admin ~]# sed '2a 106,dandan,CSO' text.txt
         101,old,CEO
         102,zhang,CTO
         106,dandan,CSO
         103,Alex,COO
         104,yy,CFO
         105,feixue,CIO
         [root@admin ~]# sed '2i 106,dandan,CSO' text.txt
         101,old,CEO
         106,dandan,CSO
         102,zhangyao,CTO
         103,Alex,COO
         104,yy,CFO
         105,feixue,CIO
    d 删除指定的行
    [root@admin ~]# sed 'd' person.txt
    [root@admin ~]#
    [root@admin ~]# sed '2d' person.txt
    101,admn,CEO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    按行替换
    c 命令用:新行取代旧行
         [root@admin ~]# sed '2c 106,dandan,CSO' person.txt
         101,admin,CEO
         106,dandan,CSO
         103,Alex,COO
         104,yy,CFO
         105,feixue,CIO

    文本替换

         s:单独使用→将每一行中第一处匹配的字符串进行替换 ==>sed命令
         g:每一行进行全部替换 ==>sed命令s的替换标志之一,非sed命令
         -i:修改文件内容 ==>sed软件的选项
         sed软件替换模型(方框▇被替换成三角▲)
         sed -i 's/▇/▲/g' text.log
         sed -i 's#▇#▲#g' text.log
     
    指定行修改配置文件
         指定行精确修改配置文件,这样可以防止修改多了地方。

      

       [root@admin ~]# sed '3s#0#9#' text.txt
    
         101,admin,CEO
         102,zhang,CTO
         193,Alex,COO
         104,yy,CFO
         105,feixue,CIO
    •  分组替换( )和1的使用说明
         sed软件的( )的功能可以记住正则表达式的一部分,其中,1为第一个记住的模式即第一个小括号中的匹配内容,2第二记住的模式,即第二个小括号中的匹配内容,sed最多可以记住9个。
    例:echo I am old teacher.如果想保留这一行的单词old,删除剩下的部分,使用圆括号标记想保留的部分。
    [root@admin ~]# echo I am old teacher. |sed 's#^.*am ([a-z].*) tea.*$#1#g'
    old
    [root@admin ~]# echo I am old teacher. |sed -r 's#^.*am ([a-z].*) tea.*$#1#g'
    old
    [root@admin ~]# echo I am old teacher. |sed -r 's#I (.*) (.*) teacher.#12#g'
    amold
    •  特殊符号&代表被替换的内容
    [root@admin ~]# sed '1,3s#C#--&--#g' person.txt #→此处&等于C
    101,admin,--C--EO      #→将1到3行的C替换为--C--
    102,zhang,--C--TO
    103,yy,--C--OO
    104,feixue,CFO
    105,dandan,CIO
     
    p 输出指定内容,但默认会输出2次匹配的结果,因此使用n取消默认输出
    按行查询
    admin[root@admin ~]# sed -n '2p' text.txt
    102,zhang,CTO

     

    • sed模式空间
      #cat test.txt
                This is 1   
                This is 2   
                This is 3   
                This is 4   
                This is 5

       

    n命令简单来说就是提前读取下一行,覆盖模型空间前一行,然后执行后续命令。然后再读取新行,对新读取的内容重头执行sed。
    例子:提取偶数行  
    sed -n 'n;p' test.txt
    N命令简单来说就是追加下一行到模式空间,同时将两行看做一行,但是两行之间依然含有 换行符,然后执行后续命令。然后再读取新行,对新读取的内容重头执行sed。此时,新读取的行会覆盖之前的行(之前的两行已经合并为一行)
    例子:提取奇数行
    sed -n 'N;P' test.txt  -----因为读取第5行时,执行N,发现没有第6行,不满足,就退出,放弃P命令
    This is 1   
    This is 3
    sed  -n ‘$!N;P’ test.txt   
    This is 1   
    This is 3   
    This is 5

    注释:读取1,$!条件满足(不是尾行),执行N命令,得出1 2,执行P,打印得1,读取3,$!条件满足(不是尾行),执行N命令,得出3 4,执行P,打印得3,读取5,$!条件不满足,跳过N,执行P,打印得5

     
     
    d命令是删除当前模式空间内容(不再传至标准输出),并放弃之后的命令,并对新读取的内容,重头执行sed。
    [root@admin ~]# sed ‘n;d’ a.txt
    This is 1   
    This is 3   
    This is 5

    注释:读取1,执行n,得出2,执行d,删除2,得空,以此类推,读取3,执行n,得出4,执行d,删除4,得空,但是读取5时,因为n无法执行,所以d不执行。因无-n参数,故输出1 3 5

     
     
    D命令是删除当前模式空间开端至 的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed。
    [root@admin ~]sed ‘N;D’ test.txt
    This is 5     
    注释:读取1,执行N,得出1 2,执行D,得出2,执行N,得出2 3,执行D,得出3,依此类推,得出5,执行N,条件失败退出,因无-n参数,故输出5
     
    h命令是将当前模式空间中内容覆盖至缓存区
    H命令是将当前模式空间中的内容追加至缓存区
    g命令是将当前缓存区中内容覆盖至模式空间
    G命令是将当前缓存区中的内容追加至模式空间
  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/xhyan/p/6236056.html
Copyright © 2011-2022 走看看