sed標籤

轉載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

如此循環
相關文章
相關標籤/搜索