sed b/t commandsと:label

sedの一般系は
[address][,address][!]{
command1
command2
}
アドレスは行番号もしくはスラッシュ括られたpatternのどちらか





[address]b[label] labelの後ろにホワイトスペースをいれてはダメ
[address]t[label] labelの後ろにホワイトスペースをいれてはダメ
labelは最大7文字
行の終わりの空白もレベルとみなされる。


bはbranch,
tはtestの略。

bはアドレスで指定した行にて、無条件にジャンプ
tはアドレスで指定した行にて、置換が成功したかどうかをテストしてJump

/address/{
s/regexp1/replace1/
s/regexp2/replace2/
t break
command
:break
}

とかにすると、
regexp1/replace1の置換が成功して、
regexp2/replace2の置換が失敗したばあい、
breakに飛ぶ?飛ばない?
commandは評価される?されない?


あとで試してみよっと



:top
command1
command2
/pattern/b top
command3
command1
/pattren/b end
command2
:end
command3
command1
/pattren/b dothree
command2
b
:dothree
command3

tはcase文みたいにつかえる

/pattren/{
s/match1 match2 match3/\1 \2 \3/
t break
s/match1 match2 /\1 \2/
t break
s/match1/\1/
t break
:break

例 

/^<tr>/{
:top
N
/\/tr/!b top
/^<tr>/s/\n/ /g
}