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

      参考:https://www.cnblogs.com/ftl1012/p/9250171.html

         https://www.runoob.com/linux/linux-comm-sed.html

      sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。

    处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。

    接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。

    定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。

      sed功能命令

    命令  功能
    a  在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“”续行
     
    c  用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用""续行
     
    i  在当前行之前插入文本。多行时除最后一行外,每行末尾需用""续行
     
    d   删除行
     
    h   把模式空间里的内容复制到暂存缓冲区
     
    H   把模式空间里的内容追加到暂存缓冲区
     
    g   把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
     
    G   把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
     
    l   列出非打印字符
     
    p   打印行
     
    n   读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
     
    q   结束或退出sed
     
    r   从文件中读取输入行
     
    !   对所选行以外的所有行应用命令
     
    s   用一个字符串替换另一个
     
    g   在行内进行全局替换
     
    w   将所选的行写入文件
     
    x   交换暂存缓冲区与模式空间的内容
     
    y   将字符替换为另一字符(不能对正则表达式使用y命令)
    

       sed常见命令参数

    p==print 
    d:delete
    =:打印匹配行的行号
    -n 取消默认的完整输出,只要需要的  
    -e 允许多项编辑
    -i 修改文件内容
    -r 不需要转义
    

       演示使用文件/etc/passwd

      只查看文件的第3行

    # sed -n '3p' passwd 
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    

       PS:需要加参数-n如果不加会在屏幕输出文件所有内容

      只查看第3行到9行

    # sed  -n '3,6p' passwd 
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    

       打印最后一行

    #sed -n '$p' passwd 
    xrdp:x:126:131::/var/run/xrdp:/usr/sbin/nologin
    

      过滤指定字符串,显示正行内容,例如过滤出root

    # sed  -n "/root/p" passwd 
    root:x:0:0:root:/root:/bin/bash
    

       PS:过滤字符串使用//包含p代表打印输出

      仅显示被匹配字符串的行号

    #sed -n '/root/=' passwd 
    1
    

       打印匹配的内容和行号,相当于又根据关键词查询了一次

    sed -n -e '/root/p' -e '/root/=' passwd 
    root:x:0:0:root:/root:/bin/bash
    1
    

       PS:-e允许多项编辑

      在文件的某行后增加一行

    #sed   4a
    ewline passwd
    

       会在第4行新增一行后再输出所有

      如果使用参数-n则只在屏幕输出增加的行newline

      删除行

    #sed   '1,10d' passwd 
    

       删除1至10行把剩下的行输出至屏幕

      数据搜索并删除

      删除包含root的行

    #sed  '/root/d' passwd
    

       数据的搜索并替换

      格式如下

    sed 's/要被替换的字符串/新的字符串/g'
    

       把root字符串替换成admin

    sed 's/root/admin/g' passwd
    

       文件的修改

      加参数 -i直接修改文件(危险操作慎用)

      把root替换成admin并且直接修改文件,直接修改屏幕无输出

    sed 's/root/admin/g' passwd -i
    

       如果只是需要替换某一行的在s前面加行号例如

      把第1行的root替换成admin,如果其他行包含root则不会替换

    sed '1s/root/admin/g' passwd -i
    
  • 相关阅读:
    luogu P4009 汽车加油行驶问题
    luogu P4015 运输问题
    luogu P2763 试题库问题
    luogu P4011 孤岛营救问题
    luogu P2765 魔术球问题
    linux 网卡
    linux yum错误
    ubuntu登录备注信息
    Ubuntu网卡配置
    linux 走三层内网添加静态路由
  • 原文地址:https://www.cnblogs.com/minseo/p/11497497.html
Copyright © 2011-2022 走看看