轉載code
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 如此循環