标签:shell
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;/\n.*ms/s/\n/ /;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:\n19ms
假如匹配\n.*ms,就执行替换,将\n替换成空格
此时模式空间内容为
114.113.114.2: 19ms
上面替换执行成功后,满足条件执行t标签,跳到a出继续执行
直到读到218.61.204.73: 不满足匹配,也就不执行\n替换空格的命令了,执行后面的命令P;D
如此循环
本文出自 “八英里” 博客,请务必保留此出处http://5921271.blog.51cto.com/5911271/1812601
标签:shell
原文地址:http://5921271.blog.51cto.com/5911271/1812601