• sed标签


    转载

    b label ,无条件跳转到标签label,如果label没有指定,跳转到命令的结尾
    t label ,如果最后一次输入的最后一个 s/// 子命令执行成功,跳转到标签label,如果label没有指定,跳转到命令的结尾
    
    cat file
    AA
    BC
    AA
    CB
    CC
    AA
    sed ‘/^AA/s/$/ YES/t;s/$/ NO/‘ file
    AA YES
    BC NO
    AA YES
    CB NO
    CC NO
    AA YES
    
    
    t是有条件跳转,在匹配AA之后执行成功了替换为YES,到t标签处发现没有设置标签,就跳到结尾处,不执行NO替换了;当不匹配AA也就不执行后面的替换YES,也不执行标签,只执行NO替换
    
    (t标签触发的条件是,必须t标签前的s///命令执行成功,否则忽略t标签)
    
    sed ‘/^AA/ba;s/$/ NO/;b;:a;s/$/ YES/‘ file 
    AA YES
    BC NO
    AA YES
    CB NO
    CC NO
    AA YES
    
    
    b是无条件跳转,当匹配AA之后触发b标签,跳转到:a处,然后执行标签后面的替换YES;当不匹配AA时不触发第一个b标签,执行替换NO语句,然后遇到第二个b标签,但没有设置标签,跳转到结尾处,跳过YES替换
    
    (b标签触发条件是,无条件遇到就跳转)
    
    
    
    cat file
    
    114.113.144.2:
    19ms
    19ms
    19ms
    36ms
    22ms
    19ms
    18ms
    218.61.204.73:
    0ms
    0ms
    0ms
    0ms
    0ms
    0ms
    0ms
    221.194.139.147:
    165ms
    157ms
    159ms
    169ms
    164ms
    163ms
    64ms
    221.194.46.244:
    32ms
    31ms
    58ms
    141ms
    119ms
    31ms
    31ms
    123.129.243.246:
    36ms
    36ms
    36ms
    42ms
    36ms
    36ms
    36ms
    123.234.6.2:
    40ms
    40ms
    40ms
    40ms
    40ms
    40ms
    40ms
    125.211.197.172:
    41ms
    41ms
    41ms
    41ms
    41ms
    41ms
    41ms
    218.60.8.171:
    6ms
    6ms
    6ms
    6ms
    6ms
    6ms
    6ms
    sed ‘/:$/{:a;N;/
    .*ms/s/
    / /;ta;P;D}‘ file 
    114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
    218.61.204.73: 0ms 0ms 0ms 0ms 0ms 0ms 0ms
    221.194.139.147: 165ms 157ms 159ms 169ms 164ms 163ms 64ms
    221.194.46.244: 32ms 31ms 58ms 141ms 119ms 31ms 31ms
    123.129.243.246: 36ms 36ms 36ms 42ms 36ms 36ms 36ms
    123.234.6.2: 40ms 40ms 40ms 40ms 40ms 40ms 40ms
    125.211.197.172: 41ms 41ms 41ms 41ms 41ms 41ms 41ms
    218.60.8.171: 6ms 6ms 6ms 6ms 6ms 6ms 6ms
    思路使用t标签,有条件跳转
    
    匹配以:结尾的行,然后执行N命令读入下一行
    
    此时模式空间内容为
    
    114.113.114.2:
    19ms
    
    假如匹配
    .*ms,就执行替换,将
    替换成空格
    
    此时模式空间内容为
    
    114.113.114.2: 19ms
    
    上面替换执行成功后,满足条件执行t标签,跳到a出继续执行
    
    直到读到218.61.204.73: 不满足匹配,也就不执行
    替换空格的命令了,执行后面的命令P;D
    
    如此循环
    
  • 相关阅读:
    Effective C# 学习笔记(三十五) 了解PLINQ如何实现并行算法
    Effective C# 学习笔记(三十八)理解Dynamic的得与失
    转单例的分析
    获取系统当前音量 和 监听系统音量 ios
    (转) iphone开发资源汇总
    xcode show line numbers
    为了编程方便的效率宏定义的一些代码
    ios6下cocos2d & ipad 调用摄像头报错问题 (在竖屏情况下调用Camera 会导致转屏)
    转KVC
    不记住的
  • 原文地址:https://www.cnblogs.com/irockcode/p/8018825.html
Copyright © 2020-2023  润新知