今日のスクリプト

こないだ本を買ってから sedawk におおはまり。かなりエキサイトして見境無くスクリプトをばかばか書く。ほぼど素人の僕がばかなスクリプトをばかばか書いたので一部強烈なバグを含んだものも出来上がったりしたが、それはそれ!。なんたって標準出力に出るだけだからなんてことないぜ!。

というわけで素晴らしい sed/awk の世界。何が素晴らしいかって、そりゃあ、楽しいところ!。『sed & awk プログラミング』の冒頭にこう書いてあるのが全てだと実感しました。

 sedawk を学ぶ気にさせる理由は、何といっても、テキスト編集の問題に対する一般解を見つけるのに便利だからだ。私自身もそうだが、一部の人にとっては、問題を解く満足感こそが仕事と苦役の境目となる。何個かのファイルで編集作業を繰り返すときに vi と sed を選べといわれたら、私なら sed を選ぶ。理由は簡単、sed の方が問題をもっと面白くしてくれるからだ。決まり切ったキー入力を繰り返す代わりに、私は解に磨きをかける。そして解に到達した暁には、自分の頭の良さにうっとりするのだちょっとした魔法を使って、自分を単純労働から救い出したような気分が味わえるのである

(太字は私)

いやまさに…。ようは気分の問題…。気持ちよすぎる。しまいには「テキストファイルを!俺にもっとテキストファイルをよこせ!うわあああああ!」というテキスト欲求の不満も覚えるようになるでしょう。仕事なのに汁出まくるぜ…。

例えばこの、僕が汁出しっぱなしで書いた糞スクリプト

/###[^#]*###/ {
	:print
	h
	s/\(###[^#]*###\).*$/\1/
	s/^.*\(###[^#]*###\)/\1/p

	g
	s/###[^#]*###//
	t print

	:end
}

見てくださいこの呪文。文字化けじゃないですよ。絵文字でもないです。しかしこの呪文で何が出来るかと言うと、ファイル中の ###〜### という表記のプレースフォルダの一覧を出してくれます。要するに今私そういう仕事してるんです。次のような HTML があったとして…、

<h1><img src="title.gif" width="100" height="50" alt="###name###"></h1>

<p>###gazo1######gazo2###</p>

<a href="news">
  <img src="###src###" width="###width###" height="###height###" alt="###alt###">
</a>
<a href="company">
  <img src="###src###" width="###width###" height="###height###" alt="###alt###">
</a>

これを test.html としましょう。上のスクリプトsedscript として保存してあるとします。そんでもってゴインと実行すると…。

% sed -n -f sedscript test.html
###name###
###gazo1###
###gazo2###
###src###
###width###
###height###
###alt###
###src###
###width###
###height###
###alt###

キャースーーテーーーキーー。うーん、しかし今はダブり無しでお願いしたい。と思ったら、

% sed -n -f sedscript test.html | sort | uniq
###alt###
###gazo1###
###gazo2###
###height###
###name###
###src###
###width###

sort して uniq 。GUI 生まれ GUI 育ちの僕は、このストリーム感覚の極地に絶頂を禁じ得ない。一人でみんなやる必要はない。みんなで助け合って生きていけばいい。そんな助け合いの精神をひしひしと感じます。

そう、慣れてしまえば上の呪文なんて数分で書けてしまうもの。その数分で、自分の頭の良さにうっとりし、ちょっとした魔法を使って、自分を単純労働から救い出したような気分が味わえるのだから、これははまっちゃいますから!

あたしゃしがないスクリプト稼業。実際 python で良くやってた作業のほとんどはテキスト処理で、僕のスクリプト作業のほとんどが sedawk に置き換えられてしまいました。

  1. ファイルを見つけて
  2. ファイルをオープンして
  3. 文字を抜き出して
  4. 文字を操作して
  5. バッファに入れて
  6. ファイルに書き出して
  7. ファイルを閉じる

太字以外の部分がいくらいつも同じで簡単だからって、やりたいところのことだけ考えてりゃ良いというのはやっぱり気持ちいいったらない。その他のところは NYACUS や bashスクリプトにおまかせ。awk を使えばさらに整形した結果を使ってあれこれしたりでやりたい放題です。うーん。これは、これは楽しい…。誰かとこの悦びを共有したい…。さあ、是非そこのあなたもご一緒に…。