zoukankan      html  css  js  c++  java
  • (3)三剑客之sed

    (1)基本介绍

    1) 工作流程:
    sed每次处理一行内容,处理时,把当前处理的行存储在临时缓存区,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,直到内容处理完毕
    2)语法格式:

    sed [options] 'command' file
    选项:
        -n : 取消默认的输出
        -i :inplace,就地编辑
        -r :支持扩展元字符
    命令:
        a :在当前行后添加一行或多行
        c :用新文本修改(替换)当前行的文本
        d :删除行
        i :在当前行之前插入文本
        s :用一个字符串替换另一个
            s :替换标志
            g :行内进行全局替换
            i :忽略大小写
        r :从文件中读
        w :将行写入文件
       
    支持基本正则表达式:^    $    .    *    []    m{n} [^] < > ()
    支持扩展正则表达式:?    +    {} |    ()
    使用扩展正则表达式两种方式:+  sed -r

    (2)sed基本用法

    1)打印 p

    sed -r "" /etc/passwd
    sed -r "p" /etc/passwd  打印两行
    sed -rn "p" /etc/passwd   输出两行,使用-n取消默认输出
    sed -rn "/root/p" /etc/passwd

    2)删除行 d

    sed -r "/root/d" /etc/passwd
    sed -r "#root#d" /etc/passwd
    sed -r "1,3d" passwd        #删除1到3行
    sed -r '3,$d' passwd        #从第三行到最后一行删除
    sed -r "/root/,5d" passwd    #匹配root行删到第5行
    sed -r "/^root/,+5d" passwd    #匹配root开头的行,下面在删除5行

    3)替换字符 s

    sed -r "s/root/jack" /etc/passwd  替换一行的前面一个,后面的不替换
    sed -r "s/root/jack/g" /etc/passwd  单行匹配全部替换
    sed -r "s/ROOT/jack/gi" /etc/passwd 忽略大小写
    sed -r 's/(.*)/#&/g' passwd            向所有行前面添加#,&代表查找字符串中匹配到的内容
    sed -r 's/(.)(.)(.*)/a1b2c3/g' passwd   1 2 3分别引用前面的()

    4)注意事项

    # cat a.txt
    /etc/abc/456
    etc
    sed -r "#/etc/abc/456#d" a.txt   #删除/etc/abc/456这一行,使用#好看一点,需要在#
    sed -r "s#/etc/abc/456#/etc/sda1#" a.txt 

    5)写文件:w

    sed -r '/root/w /tmp/1.log' passwd   从passwd文件中匹配出root的行写入到/tmp/1.log文件中
    sed -r '3,$w /tmp/1.log' passwd

    6)追加内容:a

    sed -r '2a111111' /etc/hosts       在第二行后追加内容

    7)插入内容:i

    sed -r '2i11111' /etc/hosts    在第二行插入内容

    8)修改整行:c

    sed -r '2c11111' /etc/hosts  第二行内容修改为11111

    9)反向: d

    sed -r '3d' /etc/passwd
    sed -r '3!d' /etc/passwd    删除除了第三行以外的内容

    10)引用外部变量

    var=1111
    sed -r "3a$var" /etc/passwd    第三行追加变量的值
    sed -r "$a$var" /etc/passwd   最后一行追加变量的值

    (3)常见例子
    删除注释行及空行:
    sed -ri '/^[ ]*(#|$)/d' 1.log
    sed -ri '/^[ ]*#|^[ ]*$/d' 1.log
    sed -ri '/^[ ]*$/d;/^[ ]*#/d' 1.log

    修改配置文件:
    sed -ri '$a127.0.0.1 localhost' /etc/hosts    \最后一行追加
    sed -ri '/^SELINUX/cSELINUX=disabled' /etc/sysconfig/selinux
    sed -ri '/UseDNS/cUseDNS=no' /etc/ssh/sshd_config
    sed -ri  '/GSSAPIAuthentication/cGSSAPIAuthentication no' /etc/ssh/sshd_config


    给文件添加注释行:
    sed -ri 's/^/#/' passwd
    sed -ri 's/^(.*)/#1/' passwd
    sed -r 's/^.*/#&/' passwd            &表示匹配前面查找的内容

  • 相关阅读:
    末学者笔记--KVM虚拟化存储管理(3)
    离线安装docker-ce
    OpenStack各组件的常用命令
    docker容器的基本命令
    nfs samba文件共享服务
    kvm虚拟机管理(创建、连接)
    虚拟化kvm的搭建
    python(pymysql操作数据库)
    三大特征 封装 继承 多态
    面向对象
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/8954230.html
Copyright © 2011-2022 走看看