awkで&を&へ置換

もう10年近く簡単なテキスト処理にはawkを使ってきた。

こんな簡単な、ごくあたりまえの処理ができなかった自分に気づいた。

要するに、HTMLを作るのに&を&amp;したり、<を&lt;にしたいということ。

gsub( /\&/, "&amp;", str );
gsub( /</, "&lt;", str );
gsub( />/, "&gt;", str );

こんなんでいいと思っていました。まあせいぜい、正規表現部分だけ気を付ければいいかと。

変換後のテキストに&が表示されない。

gsub( /\&/, "\\&amp;", str );
gsub( /</, "\\&lt;", str );
gsub( />/, "\\&gt;", str );

こんな風にしなければならないそうです。

なぜ今まで気づかなかったのだろうか。