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 }