zoukankan      html  css  js  c++  java
  • 简单介绍shell编程四剑客之sed

    概要:分别的作用

    grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤。

    sed:stream editor 文本编辑工具;(流编辑器),擅长取行、替换。

    awk:linux上的实现gawk,文件报告生成器;(独立的编程语言),过滤内容,擅长取列。

    find: linux上实时查找工具,通过便利指定路径下得文件系统完成文件查找。

    参考1、:《曝光linux企业运维实战》

    参考2、:https://www.cnblogs.com/maxincai/p/5146338.html

    一、sed

      sed是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑

      1、语法

        sed  [-options] ['commands']  filename;

      sed工具默认处理文本,文本内容输出屏幕已经修改,但是文件内容没有修改,需要加-i参数,对文件进行彻底修改

      2、参数及命令

        x:指定行号

        x,y:指定从x到y的行号范围

        /pattern/:查询包含模式的行

        /pattern/pattern/:查询包含两个模式的行

        /pattern/,x:从与pattern的匹配行到x号行之间的行

        x,/pattern/:从x号行到与pattern的匹配行之间的行

        x,y!:查询不包括x和y行号的行

        r:从另一个文件中读文件

        w:将文本写入到一个文件

        y:变换字符

        q:第一个模式匹配完成后退出

        l:显示与八进制ASCII码等价的控制字符

        {}:在定位行执行的命令组

        p:打印匹配行

        P:打印模板块的行

        =:打印文件行号

        a:在定位行号之后追加文本信息

        i:在定位行号之前插入文本信息

        d:删除定位行

        D:删除模板快第一行

        c:用新文本替换定位文本

        s:使用替换模式替换相应模式

        n:读取下一个输入行,用下一个命令处理新的行

        N:将当前都入行的下一行读取到当前的模式空间

        h:将模式缓冲区的文本赋值到保持缓冲区

        H:将模式缓冲区的文本追加到保持缓冲区

        x:互换模式缓冲区和保持缓冲区的内容

        g:将保持缓冲区的内容赋值到模式缓冲区

        G:将保持缓冲区的内容追加到模式缓冲区

        

       3、元字符集

        ^ :匹配行开始,/^sed/

        $:匹配行结束

        .:匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d

        *:匹配0个或多个字符,/*sed/

        []:匹配一个指定范围内的字符/[sS]ed/

        [^]:匹配一个不在指定范围内的字符,/[^A-RT-Z]E/匹配A-R和T-Z的一个字幕开头,紧跟ed 的行

        (..):匹配子串,保存匹配的字符,如s/(abc)de/1rs,abcde被替换成abcrs。

        &:保存搜索字符用来替换其他字符,s/abc/&/,abc成abc

        <:匹配单词的开始,如:/<abc/匹配包含以abc开头的单词的行

        >:匹配单词的结束

        x{m}:重复字符x,m次,/0{5}/匹配包含5个0的行

        x{m,}:重复字符x,至少m次

        x{m,n}:重复字符x,至少m次,不多于n次

    二、练习案例

      1、替换abc.txt文本中abc为ddd

    sed 's/abc/ddd/g' abc.txt

      2、打印abc.txt文本第一行到第三行

    sed -n '1,3p' abc.txt

      3、打印abc.txt文本中第一行与最后一行

    sed -n '1p; $p' abc.txt

      4、删除abc.txt文本第一行至第三行、删除匹配行至最后一行

    sed  '1,3d' abc.txt  
    sed '/df/,$d' abc.txt

      5、删除abc.txt文本最后6行及删除最后一行

    ?

     sed  '$d' abc.txt

      6、删除abc.txt最后6行

    不会做,有没有会的????????

      7、在abc.txt查找abc所在行,并在其下一行添加word字符,a表示在其下一行添加字符串

    sed '/abc/aword' abc.txt

      8、在abc.txt查找ddd所在行,并在其上一行添加word字符,i表示在其上一行添加字符串

    sed '/aaa/iword' abc.txt

      9、在abc.txt查找以.aaa结尾的行,在其行尾添加字符串word,$代表结尾标识,&在sed中表示添加

    sed 's/aaa$/&word/g' abc.txt 

      10、在abc.txt查找web的行,在其行首添加字符串www,^表示起始标识,&表示添加

    sed '/web/s/^/&www/' abc.txt 

      11、多个sed命令组合,使用-e参数

    sed -e '/www.zxg.com/s/^/&1./' -e 's/www.zxg.com$/&./g' abc.txt  
    ddd

      12、多个sed命令组合,使用“;”分割,效果跟上面一样

    sed -e '/www.zxg.com/s/^/&1./;s/www.zxg.com$/&./g' abc.txt  

      13、sed读取系统变量,进行变量替换

    sed "s/www.zxg.com/$WEBSITE/g" abc.txt

      14、修改SELinux策略,enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改为disabled,!s表示不包括SELINUX行

    sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config

    三、sed高级语法

      1、N、D、P:处理多行模式空间的问题

      2、H、h、G、g、x:将模式空间的内容放入存储空间以便接下来的编辑

      3、 :、b、t:在脚本中实现分支与条件结构

     实例:

       1、在abc.txt每行后加入空行,也即每行占用两行空间,每一行后边插入一行空行、两行空行即前三行每行后插入空行

      

    sed '/^$/d;G' abc.txt
    sed '/^$/d;G;G' abc.txt 
    sed '/^$/d;1,3G;' abc.txt  

      

        2、将abc.txt偶数行删除及隔两行删除一行

    sed 'n;d' abc.txt
    sed 'n;n;d'  abc.txt

        3、在abc.txt匹配行前一行、后一行插入空行以及同时在匹配前后插入空行

    sed '/abc/{x;p;x}' abc.txt
    sed '/abc/G' abc.txt
    sed '/abc/{x;p;x;G}' abc.txt  

        4、在abc.txt每行前加入顺序数字序号、加上制表符 " "即 "."符号

    [root@web1 sed]# sed = abc.txt|sed 'N;s/
    / /'
    1 ddd
    2 www.zxg.com
    3 web
    4 aaaa
    5 aaa
    6 bdc
    7 abc
    8 ac
    9 ab
    10 dfadfsfaklfjksdaf
    11 adfafdfasfdfadsfs
    12 aaaaaaaaaaaaaaa
    13 bbbbbbbbbbbbbbbbbb
    14 cccccccccccccccccccc
    15 C
    [root@web1 sed]# sed = abc.txt|sed 'N;s/
    /	/'
    1       ddd
    2       www.zxg.com
    3       web
    4       aaaa
    5       aaa
    6       bdc
    7       abc
    8       ac
    9       ab
    10      dfadfsfaklfjksdaf
    11      adfafdfasfdfadsfs
    12      aaaaaaaaaaaaaaa
    13      bbbbbbbbbbbbbbbbbb
    14      cccccccccccccccccccc
    15      C
    [root@web1 sed]# sed = abc.txt|sed 'N;s/
    /./'
    1.ddd
    2.www.zxg.com
    3.web
    4.aaaa
    5.aaa
    6.bdc
    7.abc
    8.ac
    9.ab
    10.dfadfsfaklfjksdaf
    11.adfafdfasfdfadsfs
    12.aaaaaaaaaaaaaaa
    13.bbbbbbbbbbbbbbbbbb
    14.cccccccccccccccccccc
    15.C
    [root@web1 sed]# 

        5、删除abc.txt行前和行尾的任意空格

    [root@web1 sed]# sed 's/^[ 	]*//;s/[ 	]*$//' abc.txt
    ddd
    www.zxg.com
    web
    aaaa
    aaa
    bdc
    abc
    ac
    ab
    dfadfsfaklfjksdaf
    adfafdfasfdfadsfs
    aaaaaaaaaaaaaaa
    bbbbbbbbbbbbbbbbbb
    cccccccccccccccccccc
    C
    [root@web1 sed]# cat abc.txt 
    ddd
    www.zxg.com
    web
       aaaa
    aaa   
       bdc
    abc
    ac
    ab
    dfadfsfaklfjksdaf
    adfafdfasfdfadsfs
    aaaaaaaaaaaaaaa
    bbbbbbbbbbbbbbbbbb
    cccccccccccccccccccc
    C
    [root@web1 sed]# 

        

        6、打印abc.txt关键词abc与ab之间的内容

    [root@web1 sed]# sed -n '/abc/,/ab/'p abc.txt
    abc
    ac
    ab
    [root@web1 sed]# 

        7、打印及删除abc.txt最后两行

    [root@web1 sed]# sed '$!N;$!D' abc.txt
    cccccccccccccccccccc
    C
    [root@web1 sed]# sed 'N; $!P; $!D; $d' abc.txt
    ddd
    www.zxg.com
    web
       aaaa
    aaa   
       bdc
    abc
    ac
    ab
    dfadfsfaklfjksdaf
    adfafdfasfdfadsfs
    aaaaaaaaaaaaaaa
    bbbbbbbbbbbbbbbbbb
    [root@web1 sed]# 

      

    转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10824548.html 

  • 相关阅读:
    ReactiveCocoa -函数式编程和响应式编程
    关于即时通讯功能开发技术选型
    cordova 打包的项目里加入微信支付功能编译问题。
    OC和swift互相调用。
    有关 -all_load和-ObjC
    在一个项目中同时使用Swift和Objective-C代码混合编程的方法
    iOS开发中Static和Const关键字的的作用
    开发所有插件必须要这个插件
    phonegap 二维码扫描插件使用
    大数据基础---Kafka深入理解分区副本机制
  • 原文地址:https://www.cnblogs.com/zhangxingeng/p/10824548.html
Copyright © 2011-2022 走看看