• 关于sed用法


    sed处理流程

    sed的处理流程,简化后是这样的:

    1.读入新的一行内容到缓存空间;

    2.从指定的操作指令中取出第一条指令,判断是否匹配pattern;

    3.如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;

    4.如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;

    5.当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;

    6.当所有行都处理完之后,结束。

    sed基础用法

    1.关于删除(d):

      删除某行:sed 'd' file   删除所有

           sed '1d' file sed '1,3d' sed -e '1d' -e '3d' file  删除指定行

      删除匹配的行或者字符:sed '/test/d' file 删除包含test字符的行

          sed '/test/!d' file 删除不包含test字符的行

          sed '/[0-9]{3}/d' file 删除包含三位数的行

          sed ‘s/^…//’ file           删除开头的三个字符

          sed ‘s/…$//’ file           删除结尾的三个字符

          sed 's/test//' file     删除test字符  (/g表示全局)

          sed '3s/test//' file     删除第3行中的test字符

      删除空格:

          sed '/1,/^$/d'  file      删除从第一行开始直到出现空格

          sed  '/^$/d' file    删除所有空行

          sed  's/^ *//g' file    删除行首的空格

    2.关于显示和替换(s,p):  s模式与g搭配,全局替换  搭配n,跳过不匹配行,搭配I忽略大小写

    //关于n:sed的执行流都是先读取一行到模式空间,然后执行编辑,再输出, 当前行完全处理后sed首先清空模式空间,然后自动再读取下一行到模式空间中。可以在执行编辑的过程中通过命令n来读取文件的下一行,此时模式空间里的内容被下一行完全替换,并且当前的行号增1,但是控制流没有回到起始点,而是在n命令后继续

      匹配:    sed –n '/test/p' file    显示含有test的行,-n跳过其他不符的行

          替换并显示:  sed  -n 's/test/TEST/p' file   

             sed  -n 's/test/TEST/gp' file  增加g,替换每一行中所有test字符

          保存符合的样式:sed  -n  's/(.*):(.*)/2 1/'    把第一个匹配到的样式保存在1中,以此类推

         替换指定行字符:sed -n '/9/s/test/TEST/p' file  找到含有9字符的行,并把这行的test变成TEST

                                sed -n '/9/,/222/s/test/TEST/p' file 找到含有9字符的行和含有222字符的行,并把中间的这些行的test变成TEST

                                sed -n '9, 22s/test/TEST/p'  file 从第9行到22行之间的test变成TEST

      匹配ip地址替换成域名:sed 's/([0-9]{1,3}.){3}[0-9]{1,3}/www.hello.com/g' file   注意在sed匹配中,特殊字符要进行转义

      分组命令: sed '/hello/,/hehe/{s/test/TEST/g;s/do/did/g}' file 在指定 描述限定下,想完成更多的操作使用大括号{} 匹配到/hello/开始,/hehe/结束

      替换的重定向:

          sed  's/hello/hi/g < file > file1       将file中的hello替换成hi,然后file1

          echo hello | sed 's/hello/hi'     

      替换模式中的一些特殊字符:  

            & :在正则表达式匹配单词时,可以使用&代替已经匹配的内容   sed 's/hehe/oo&oo/g' file   ==》 ooheheoo

            exp:  echo  "111 hello" | sed 's/[0-9][0-9]*/ & hao /         ==> 111 hao hello

            1:保存第一个匹配到的样式

            !:相反与取反   sed '1,3!d'  

            注意:如果需要匹配&字符需要来转义             

      另外:   中间的/只是用来分隔的,除了换行符其他都可以用 例如 : | !? 等      #sed 's?ko?hahaha?g' file

      样式匹配的应用:同事给我出的题  调换第一行和第三行的位置

    # echo -e "a
    b
    c
    d"  |sed -e 'N;N;N' -e 's/([a-z]*)
    ([a-z]*)
    ([a-z]*)
    ([a-z]*)/3
    2
    1
    4/'
    c
    b
    a
    d

    3.关于编辑文件(a追加,i写入):    

        echo "a b c d" |sed '/b/ aHELLO'  追加到匹配行

        echo "a b c d" |sed '/b/,/d/ aHELLO'  从第一个匹配行开始,到第二个匹配行结束追加

     

    写着写着就觉得需要赶紧买本sed&awk看看

  • 相关阅读:
    PHP 动态执行
    jenkins 'cordova' command not recognised on Jenkins Windows slave
    ionic3 实现扫码功能
    解决ionic3 android 运行出现Application Error
    解决添加codova plugin 编译出现问题:Execution failed for task ':processDebugManifest'.
    菜鸟的 Sass 学习笔记
    解决关于ios访问相机闪退问题
    解决ios关于:ERROR Internal navigation rejected
    Angular4 组件通讯方法大全
    ASP.NET MVC5 使用MiniProfiler 监控MVC性能
  • 原文地址:https://www.cnblogs.com/hlbb-zl/p/5920977.html
Copyright © 2020-2023  润新知