• Linux三剑客sed之增删改查


    一、sed查找

    格式功能
    ‘1p’ ‘2p’指定行号查找
    ‘1,5p’指定行号范围查找
    /[xyz]/p找出包含字符xyz中任何一个的行,两个斜线中间支持正则
    /10/,/20/p查找从10开始到20结束

    指定行号查找

    sed -n '3p' oldboy.txt
    sed '3p' oldboy.txt
    sed '$p' oldboy.txt        # $表示最后一行
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    指定行号范围查找

    sed -n '1,3p' oldboy.txt
    sed -n '4,$p' oldboy.txt    # $表示最后一行
    
    • 1
    • 2

    在这里插入图片描述

    过滤

    sed -n '/[45]/p' oldboy.txt         # 找出包含字符4、5中任何一个的行
    sed -n '/[0-9]/p' oldboy.txt        # 查找包含0-9的行
    
    • 1
    • 2

    在这里插入图片描述

    sed -nr '/[0-9]+/p' oldboy.txt        # 查找包含0-9字符任意组合的行
    
    • 1

    sed默认不支持扩展正则,-r参数支持扩展正则

    在这里插入图片描述

    实际生产环境中,如果文件太大,我们一般不用vim/cat等命令查看,一般使用more/less/head/tail/grep/sed/awk等查看

    查找11:02:13的日志

    sed -n '/11:02:13/p' access.log 
    
    • 1

    查找从11:02:13开始,到11:02:14结束的日志

    sed -n '/11:02:13/,/11:02:14/p' access.log    
    
    • 1

    在这里插入图片描述

    查找从11:02:13开始,到11:02:140结束的日志,由于文件中没有11:02:140,故不会停止,直到文件末尾

    sed -n '/11:02:13/,/11:02:140/p' access.log    
    
    • 1

    在这里插入图片描述

    二、sed删除

    格式功能
    ‘1d’ ‘2d’指定行号删除
    ‘1,5d’指定行号范围删除
    /[xyz]/d删除包含字符xyz中任何一个的行,两个斜线中间支持正则
    /10/,/20/d删除从10开始到20结束

    按行删除和指定范围删除

    sed '3d' oldboy.txt
    sed '2,3d' oldboy.txt
    
    • 1
    • 2

    在这里插入图片描述

    删除指定内容

    sed '/lidao/d' oldboy.txt
    
    • 1

    在这里插入图片描述

    使用d和p两种方式,删除注释行以及空行

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    def fact(j):
        sum = 0
        if j == 0:
            sum = 1
        else:
            sum = j * fact(j - 1)  # 乘法
        return sum
    
      # 打印
    print (fact(5))   # 打印
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    sed -r '/^$|^\s*#/d' 1.py           # 删除空行和注释行
    sed -nr '/^$|^\s*#/!p' 1.py         # 空行和注释行不打印,!p表示不打印
    
    • 1
    • 2

    在这里插入图片描述

    三、sed增加

    格式功能
    creplace,替代这行内容
    aappend,向指定的行或每一行后面追加内容
    iinsert,向指定的行或每一行前面插入内容

    实际上记一个a就可以

    在指定行添加指定内容或进行替换

    sed '3a 996,lidao996,UFO' oldboy.txt      # 第3行后追加996,lidao996,UFO
    sed '3i 996,lidao996,UFO' oldboy.txt      # 第3行前插入996,lidao996,UFO
    sed '3c 996,lidao996,UFO' oldboy.txt      # 第3行替换为996,lidao996,UFO
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    向ssh_config最后一行追加以下配置:

    UseDNS no
    GSSAPIAUTCATION no
    PermitRootLogin no
    
    • 1
    • 2
    • 3
    sed '$a UseDNS no\nGSSAPIAUTCATION no\nPermitRootLogin no' ssh_config
    
    • 1

    四、sed替换

    格式功能
    s#111#222#g全局将111替换为222
    s@111@222@g全局将111替换为222
    s/111/222/g全局将111替换为222
    sed 's#[0-9]##g' oldboy.txt
    
    • 1

    在这里插入图片描述

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    def fact(j):
        sum = 0
        if j == 0:
            sum = 1
        else:
            sum = j * fact(j - 1)  # 乘法
        return sum
    
      # 打印
    print (fact(5))   # 打印
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    删除注释部分,只留下代码

    sed -r 's@^$|^\s*#.*$|#.*$@@g' 1.py | egrep -v '^$'
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    go装饰器模式
    open62541开发:添加sqlite3 历史数据库
    尚好房 07_前端房源展示
    【从跳板机ssh到内网目标服务器】配置vscode实现远程连接
    微信小程序支付及退款整体流程
    基础二分学习笔记
    Kite代码补全软件--linux/windows/mac版
    mybatisPlus实现分页
    大型网站高并发解决方案——集群
    CMake中message的使用
  • 原文地址:https://blog.csdn.net/qq_42500831/article/details/126353651