zoukankan      html  css  js  c++  java
  • sed用法说明

    sed介绍

    sed:stream editor

    是一个行编辑器,或叫流编辑器,每次处理一行,处理完一行再处理下一行。sed并不直接处理源文件,而是读取一行后放入模式空间(patten space)里,在这个模式空间中完成编辑,并输出显示。当然sed加上 –i 参数也可以直接原处理文件。sed不仅有模式空间,还有一个叫保持空间的概念,模式空间和保持空间的内容可以相互交换,覆盖,追加等,但是用的较少,用起来也比较烧脑,属于sed的高级用法。

    sed用法

    sed [option]… ‘script’ inputfile … …

    常用选项:

    -n:不输出模式中的内容到屏幕

    -e:多点编辑

    -f /path/to/script_file:从指定文件中读取编辑脚本

    -r:支持使用扩展正则表达式

    -i:修改原文件

    地址定界:

    1.不给地址:对全文进行处理

    2.单地址:

                #:指定的行

                /pattern/:被此模式所能匹配到的每一行

    3.地址范围:

                #,#:表示从第几行到第几行

                #,+#:表示第几行开始后的多少行

                /pat1/,/pat2/:表示第一次匹配到模式1,模式2的行

    编辑命令:

    d:删除

    p:显示

    a ext:在行后面追加文本;支持使用 实现多行追加

    i ext:在行前面插入文本;支持使用 实现多行插入

    c ext:替换行为单行或多行文本

    w /path/to/somefile 保存模式空间匹配到的行至指定文件中

    r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后

    =:为模式空间中的行打印行号

    !:取反

    s///:替换标记,s///g行内全局替换;支持使用其它分隔符,s@@@,s###

    用法举例:

    [root@slave ~]# cat ifcfg-ens33 
    TYPE="Ethernet"
    BOOTPROTO="none"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
    DEVICE="ens33"
    ONBOOT="yes"
    IPADDR="192.168.100.20"
    PREFIX="24"
    GATEWAY="192.168.100.2"
    DNS1="114.114.114.114"
    IPV6_PEERDNS="yes"
    IPV6_PEERROUTES="yes"
    IPV6_PRIVACY="no"

    1.显示1到3行的内容

    [root@slave sed]# sed -n '1,3p' ifcfg-ens33
    TYPE="Ethernet"
    BOOTPROTO="none"
    DEFROUTE="yes"
    

    2.删除第2行至最后一行

    [root@slave ~]# sed '2,$d' ifcfg-ens33 
    TYPE="Ethernet"
    

    3.把192.168.100.20替换成192.168.100.30并只显示此行

    [root@slave ~]# sed -n 's/192.168.100.20/192.168.100.30/;/IPADDR/p' ifcfg-ens33 
    IPADDR="192.168.100.30"

    4.把所有的IPV6换成ipv6

    [root@slave ~]# sed -n '1,$ s/IPV6/ipv6/g;/ipv6/p' ifcfg-ens33 
    ipv6INIT="yes"
    ipv6_AUTOCONF="yes"
    ipv6_DEFROUTE="yes"
    ipv6_FAILURE_FATAL="no"
    ipv6_ADDR_GEN_MODE="stable-privacy"
    ipv6_PEERDNS="yes"
    ipv6_PEERROUTES="yes"
    ipv6_PRIVACY="no"
    

    5.在第1行之前和第3行后面加入文本“hello sed”,并显示1到4行

    [root@slave ~]# sed -ne '1 i hello sed
    ===============' -e '3 a ===================
    hello sed' -e '1,4p' ifcfg-ens33 
    hello sed
    ===============
    TYPE="Ethernet"
    BOOTPROTO="none"
    DEFROUTE="yes"
    ===================
    hello sed
    IPV4_FAILURE_FATAL="no"

    6.删除包含IPV6的行

    [root@slave ~]# sed -e '/.*IPV6.*/d' ifcfg-ens33 
    TYPE="Ethernet"
    BOOTPROTO="none"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    NAME="ens33"
    UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
    DEVICE="ens33"
    ONBOOT="yes"
    IPADDR="192.168.100.20"
    PREFIX="24"
    GATEWAY="192.168.100.2"
    DNS1="114.114.114.114"
    

    7.从文件sedscript读入sed脚本,要求将BOOTPROTO=”none”改成”static”,注释掉所有包含IPV6的行,在文件开始和结束行加===sed is a strong tool===,并将网关改成192.168.100.3最后将修改后的内容保存到ifcfg-test文件中

    [root@slave sed]# cat sedscript 
    #!/bin/sed -f
    # this is a sed script
    1 i === sed is strong tool === 
    s/^IPV6/# IPV6/g 
    s/none/static/
    s/192.168.100.2/192.168.100.3/
    $ a === sed is strong tool ===
    w ifcfg-test
    
    [root@slave sed]# chmod +x sedscript 
    [root@slave sed]# ./sedscript ifcfg-ens33 
    [root@slave sed]# cat ifcfg-test
    TYPE="Ethernet"
    BOOTPROTO="static"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    # IPV6INIT="yes"
    # IPV6_AUTOCONF="yes"
    # IPV6_DEFROUTE="yes"
    # IPV6_FAILURE_FATAL="no"
    # IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens33"
    UUID="3503f57e-dce7-425e-870f-efbc4897bfb2"
    DEVICE="ens33"
    ONBOOT="yes"
    IPADDR="192.168.100.30"
    PREFIX="24"
    GATEWAY="192.168.100.3"
    DNS1="114.114.114.114"
    # IPV6_PEERDNS="yes"
    # IPV6_PEERROUTES="yes"
    # IPV6_PRIVACY="no"
    
    
    上面这个例子中的i和a插入和追加的内容没有写入到文件中,但是用重定向的方式可以。
  • 相关阅读:
    基本数据类型(二)
    jquery 基础
    CSS 基础
    Hyperledger Fabric Ordering Service过程
    Hyperledger Fabric Transaction Proposal过程
    Hyperledger Chaincode启动过程
    Hyperledger Fabric1.0 整体结构
    golang学习
    数字签名详解
    设置MongoDB课程环境
  • 原文地址:https://www.cnblogs.com/mfyang/p/7270339.html
Copyright © 2011-2022 走看看