四剑客-sed

作者: 天生顽皮 | 来源:发表于2021-07-04 15:55 被阅读0次

    增删改查

    进阶:模式空间与保持空间 把文件中所有的回车替换为空格

    1.sed命令执行流程

    分析,解决故障,问题的时候
    执行流程
    执行流程: 四个字 找谁干啥(条件命令)
    
    image.png

    2.sed命令查找

    p-print 显示/打印
    image.png
    #案例01 显示第3行     固定行号 某一行  
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    [root@m01 /server/files]# sed -n '3p' sed.txt 
    103,李导996,COO
    [root@m01 /server/files]# 
    #案例02 显示文件的第2到第5行     行号范围  
    [root@m01 /server/files]# sed -n '2,5p' sed.txt
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    [root@m01 /server/files]# 
    #案例03 模糊查找   查找包含 oldboy 单词的行
    grep 'oldboy'
    [root@m01 /server/files]# sed -n '/oldboy/p' sed.txt 
    101,oldboy,CEO
    #案例04 模糊查找 使用正则匹配  
    [root@m01 /server/files]# sed -nr '/oldboy|lidao/p' sed.txt 
    101,oldboy,CEO
    110,lidao,COCO
    #案例05 模糊查找, 范围 匹配 从包含103的行 到匹配119的行
    [root@m01 /server/files]# sed -n   '/103/,/119/p' sed.txt 
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    [root@m01 /server/files]# #sed -n   '/从哪里来/,/到哪里去/p' sed.txt 
    
    #取出 日志中 11:02 到 11:30日志
    #sed -n '//,//p' access.log 
    sed -n '/11:02:00/,/11:30:00/p' access.log |less 
    
    #案例06   实现 grep -A功能 了解
    grep -A  5     oldboy   oldboy.txt 
    [root@m01 /server/files]# cat sed.txt 
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    [root@m01 /server/files]# sed -n '3,+5p'   sed.txt 
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    [root@m01 /server/files]# sed -n '/oldboy/,+5p'   sed.txt 
    [root@m01 /server/files]# sed -n '/oldboy/,+5p'   sed.txt 
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    #案例07 实现有规律的 匹配多行 了解
    [root@m01 /server/files]# seq 10 |sed -n '1~2p'
    1
    3
    5
    7
    9
    [root@m01 /server/files]# seq 10 |sed -n '2~2p'
    2
    4
    6
    8
    10
    #案例08 排除   oldboy行排除掉
    [root@m01 /server/files]# sed -n '/oldboy/p' sed.txt 
    101,oldboy,CEO
    [root@m01 /server/files]# sed -n '/oldboy/!p' sed.txt 
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    [root@m01 /server/files]# sed '/oldboy/d' sed.txt 
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    

    3.删除

    d---delete
    image.png
    # 案例01 
    [root@m01 /server/files]# sed '/oldboy/d' sed.txt 
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    # 案例02 删除/显示最后一行
    [root@m01 /server/files]# sed '1d' sed.txt 
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    [root@m01 /server/files]# sed '$d' sed.txt 
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    [root@m01 /server/files]# 
    [root@m01 /server/files]# 
    [root@m01 /server/files]# 
    [root@m01 /server/files]# sed -n '$p' sed.txt 
    119,huiling,CFO
    #案例03 删除 文件中从包含lidao的行到最后一行的内容
    [root@m01 /server/files]# cat   sed.txt 
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    [root@m01 /server/files]# sed '/lidao/,$d' sed.txt 
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    
    4 增加
    cai 行为单位
    image.png
    #案例01 在文件的最后一行后面增加一行内容 lidao007,007,007,/home/hlj
    [root@m01 /server/files]# sed '$a lidao007,007,007,/home/hlj' sed.txt 
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    lidao007,007,007,/home/hlj
    #案例02 在 第1行上面插入一行内容   lidao007,007,007,/home/hlj
    [root@m01 /server/files]# sed '1i lidao007,007,007,/home/hlj' sed.txt 
    lidao007,007,007,/home/hlj
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    #案例03 替换第1行的内容为 lidao007,007,007,/home/hlj
    [root@m01 /server/files]# sed '1c lidao007,007,007,/home/hlj' sed.txt 
    lidao007,007,007,/home/hlj
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    #案例04 在/etc/ssh/sshd_config 最后增加内容
    [root@m01 /server/files]# sed '$a Port=22\nPermitRootLogin=no\nUseDNS=no\nGSSAPIAuthcation=no' 
    /etc/ssh/sshd_config 
    cat >>sshd_config<<EOF
    Port=22
    PermitRootLogin=no
    UseDNS=no
    GSSAPIAuthcation=no
    EOF
    echo 'Port=22
    PermitRootLogin=no
    UseDNS=no
    GSSAPIAuthcation=no'
    
    5 修改(替换)
    s###g s@@@g s///g sAAA
    s------替换 substitute sub
    #案例01 替换
    [root@m01 /server/files]# sed 's#oldboy#oldgirl#g' sed.txt 
    101,oldgirl,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    #案例02 全局替换 非全局替换
    # g全局替换  
    # 不加上g默认是只替换每一行第1个匹配的内容
    [root@m01 /server/files]# sed 's#[0-9]#<666>#g' sed.txt 
    <666><666><666>,oldboy,CEO
    <666><666><666>,zhangya,CTO
    <666><666><666>,李导<666><666><666>,COO
    <666><666><666>,yy,CFO
    <666><666><666>,feixue,CIO
    <666><666><666>,lidao,COCO
    <666><666><666>,huiling,CFO
    [root@m01 /server/files]# sed 's#[0-9]#<666>#' sed.txt 
    <666>01,oldboy,CEO
    <666>02,zhangya,CTO
    <666>03,李导996,COO
    <666>04,yy,CFO
    <666>05,feixue,CIO
    <666>10,lidao,COCO
    <666>19,huiling,CFO
    #案例03 后向引用
    [root@m01 /server/files]# echo   {01..5}{a..e} |sed -r 's#([0-9a-z]+)#<\1>#g'
    <01a> <01b> <01c> <01d> <01e> <02a> <02b> <02c> <02d> <02e> <03a> <03b> <03c> <03d> <03e> <04a> <04b> <04c> 
    <04d> <04e> <05a> <05b> <05c> <05d> <05e>
    
    6 sed进阶
    #案例01 把文件中的回车替换为空格(使用sed)  
    [root@m01 /server/files]# cat sed.txt 
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    104,yy,CFO
    105,feixue,CIO
    110,lidao,COCO
    119,huiling,CFO
    ## 直接使用出现故障
    [root@m01 /server/files]# sed 's#\n# #g' sed.txt 
    101,oldboy,CEO
    102,zhangya,CTO
    103,李导996,COO
    #通过sed命令 N选项读取多行
    seq 10 | sed 'N;s#\n# #g'
    seq 10 | sed 'N;N;N;N;N;N;N;N;N;s#\n# #g'
    #sed命令自带 循环格式
    [root@m01 /server/files]# seq 5 | sed ':label ;N;s#\n# #g; t label ' 
    1 2 3 4 5
    [root@m01 /server/files]# 
    #显示 循环执行流程
    [root@m01 /server/files]# seq 5 | sed ':label ;N;s#\n# #g;p; t label ' 
    1 2
    1 2 3
    1 2 3 4
    1 2 3 4 5
    1 2 3 4 5
    # N 读写下一行内容,到内存中(模式空间)
    # 循环   :标签   ; 循环内容; t 标签
    

    相关文章

      网友评论

        本文标题:四剑客-sed

        本文链接:https://www.haomeiwen.com/subject/gjamultx.html