• 三剑客之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命令是将当前缓存区中的内容追加至模式空间
  • 相关阅读:
    uCOS-II 学习笔记之任务管理--------任务控制块OS_TCB
    uCOS-II 学习笔记之事件管理--------信号量管理的学习
    格子计划
    phpcms二次开发之base.php的桥梁作用
    [leedcode 215] Kth Largest Element in an Array
    [leedcode 214] Shortest Palindrome
    [leedcode 213] House Robber II
    [leedcode 212] Word Search II
    [leedcode 211] Add and Search Word
    [leedcode 210] Course Schedule II
  • 原文地址:https://www.cnblogs.com/xhyan/p/6236056.html
Copyright © 2020-2023  润新知