Hatena::ブログ(Diary)

oogattaの勉強日記 このページをアンテナに追加 RSSフィード

2006-02-09

最近のスクリプト

| 15:09

お仕事(まごころこめた HTML づくり)用に、じわっじわっと書いています。

実際の文字コードが META CHARSET と合ってるのチェック

find(f) で、実行されたディレクトリ以下にある、引数の正規表現にマッチするファイルを拾って、nkf -g で自動判別した文字コードの結果と共に awk のスクリプトに渡しています。

わざわざ bash に渡しているのは、NYACUS の逆クォート展開がなかなかにオーバーフローしてしまうためです。

_nya
alias checkcharset bash "d:\scripts\checkcharset\main.sh"
main.sh
for i in `findf ./ | egrep $1`
do
	echo $i
	gawk -f "d:\scripts\checkcharset\awkscript" autocharset=`nkf -g $i` $i
done

一行目の find(f) で、-name じゃなくて (e)grep になってるのは「正規表現が使いたいから」ではなくて、単に僕の NYACUS → bash タッグでなぜか -name がうまく動かなかったからです…。

awkscript
BEGIN {
	IGNORECASE = 1;
	HasCharset = 0;
	MetaCharset = "";
}
/<meta.+Content-Type.+charset=/ {
	HasCharset = 1;

	sub(/^.*<meta.+Content-Type.+charset=/,"");
	sub(/".*$/,"");

	MetaCharset = $0
}
END {
	if( HasCharset == 0 ) {
		print "No Charset!!";
	}
	else {
		if(tolower(autocharset) == tolower(MetaCharset)) {
			print "ok:" autocharset;
		}
		else {
			print "dame";
			print "auto:" autocharset
			print "meta:" MetaCharset
		}
	}
}

Tidy かけちゃうぞ

バリデート目的で Tidy をかける。書き換えは無し。Tidy くんは口うるさいので、sed で無視したいエラーを消しちゃったりして…。

_nya
alias tidise bash "d:\scripts\tidise\main.sh"
main.sh
for i in `findf ./ | egrep $1`
do
	echo $i
	tidy -errors -quiet -raw $i 2>&1 | sed -f "d:\scripts\tidise\ignorelist"
done

Tidy くんはマナーが良いのでエラーを標準エラー出力に出してくれますが、今回はそのエラーこそ欲しい内容なので標準出力にぶっこんで sed にかけます。

ignorelist
/lacks "summary" attribute/d

今のとこ、内容これだけ…。

title 調べちゃうぞ

_nya
alias gettitles bash "d:\scripts\gettitles\main.sh"
main.sh
for i in `findf ./ | egrep $1`
do
	echo $i
	sed -n -f "d:\scripts\gettitles\sedscript" $i | nkf -s
done

最後強引に nkfShift_JIS にしてから NYACUS のコンソールに出力してます。

sedscript
/<title>/ {
	s/^.*<title>//
	s/<\/title>.*$//
	s/\(^.*\)/	\1/p
}

ごりごりっ…、と。

刹那のきらめき

でも、こうして保存して使い回しているからえらいスクリプトくんだとかそういうことは全然無くて、その場でふと書き殴って使い捨てているスクリプト野郎共も同じくらいありがたい存在であります。ありがたや、ありがたや…。供養のつもり…。

machi山machi山 2006/02/15 01:29 ¥(^.*¥) 顔文字に見える

oogattaoogatta 2006/02/15 01:49 でしょうでしょう。もっと長いスクリプト書いてると、気づくと一面顔文字だらけでちょっと気分が悪くなります。

2006-02-01

xargs.cmd

| 16:17

はじめて xargs ちゃんに出会って以来、彼女のことが頭から離れなくて色々検索した結果、Windows 用に気合いでバッチを作った猛者の方がいらっしゃった!

  • xargs.cmd
    標準入力からの引数でコマンドを繰り返し実行するバッチファイル(CMD)

猛者だ…。そんなわけで NYACUS で使い倒す

findf ./ -name "*.html" | largs egrep -l -e "u[nm]ko|ti[nm]po" %I

はいきた!。徹夜作業などで朦朧とし、うっかり手が滑ってヒワイな言葉をコメントに書いたりしてないかを確実にチェック。これで納品時も安心です。

本物と違って %I が必要だったりしますが、これって Windows のプロンプトの FOR文 の変数だそうなので、help FOR で出てくるオプション構文あれこれが使えちゃいます。

    %~I         - すべての引用句 (") を削除して、I を展開します。
    %~fI        - %I を完全修飾パス名に展開します。
    %~dI        - %I をドライブ文字だけに展開します。
    %~pI        - %I をパス名だけに展開します。
    %~nI        - %I をファイル名だけに展開します。
    %~xI        - %I をファイル拡張子だけに展開します。
    %~sI        - 展開されたパスは短い名前だけを含みます。
    %~aI        - %I をファイルの属性に展開します。
    %~tI        - %I ファイルの日付/時刻に展開します。
    %~zI        - %I ファイルのサイズに展開します。
    %~$PATH:I   - PATH 環境変数に指定されているディレクトリを
                  検索し、最初に見つかった完全修飾名に %I を
                  展開します。
                  環境変数名が定義されていない場合、または検索
                  してもファイルが見つからなかった場合は、この
                  修飾子を指定すると空の文字列に展開されます。

修飾子を組み合わせて、複合結果を得ることもできます:

    %~dpI       - %I をドライブ文字とパスだけに展開します。
    %~nxI       - %I をファイル名と拡張子だけに展開します。
    %~fsI       - %I を完全なパスと短い名前だけに展開します。
    %~dp$PATH:I - PATH 環境変数に指定されているディレクトリを
                  検索して %I を探し、最初に見つかったファイル
                  のドライブ文字とパスだけに展開します。
    %~ftzaI     - %I を DIR コマンドの出力行のように展開します。

こりゃ便利!

また、xargs.cmd なら空白と改行で中身をばらしてくれて、largs.cmd は予め改行でしかばらさないようになっていました。

僕レベルの使い方では、やりたいことはみんな NYACUS で出来てしまうわけですが、逆クォート展開ですぐオーバーフローしてしまうのだけは悲しかったんです。これでほとんど解決!。xargs さんとつきあいたい。

ちなみに先月俺の女になった Apache さんはその後、モジュールのソースを読んだりしていたぶり倒して楽しんでいます。すっかり俺の女だぜフフフ…。

RoccoRocco 2006/02/02 23:09 awk の正規表現は最長一致と言われ、与えられた正規表現の中で最も長いものにマッチします。(いいか、悪いかは置いておくとして…)

oogattaoogatta 2006/02/04 19:48 「最左、最長一致」って奴ですね!。最も左も、最も長いもそれぞれはわかっているつもりで、合わさるといつも一瞬ディスプレイの前で思考停止してしまいます…。

2005-12-14

NACUS

| 01:21

愛することそれ自体が目的になって

こないだから勤め先のネットワークにID・パスワード付きのFTPプロキシが入って、外部へのFTP接続はプロキシの経由が必須になった。どうもウィルスチェックもしてくれるらしく、とっても安心でうれしい。

と、思っていたら、あっ、cygwin が…。

Unfortunately, setup.exe does not currently support password authorization for proxy servers. Chapter 2. Setting Up Cygwin

うっ、ががーん…。というわけでしばらくの間色々ソースからぽちぽちとインストールしていたら、ふと、おいらはなにをやっているんでしょうかと思った。そもそも僕が cygwin を使っている理由はなんだったか?。実際、ただの「使いやすい cmd.exe 」が欲しかっただけじゃなかろうか…?。

退屈な作業を少しでも楽にと思い、肩が凝るのでマウスを出来る限り触りたくないと思い始めたはずの cygwin いじり。いつの間にか、それ自体が理由にすりかわってしまっていたようです。反省する。

愛することは感じることだから

そんなわけで cygwin のターミナルとして使っていた ck のサイトを見ていたら ckw というのがあり、これは cmd.exe へのターミナルで随分軽くて色々設定できて良かったりして、こっからさらにWindowsバイナリの bash を立ち上げてゴネていたんですが、やっぱりうーむ、「ただ単純に cmd.exe と置き換えて使える気分なのないか?!」と思ってふと、ckw のヘルプを見ていたら「 cmd.exe 以外を実行するには」という項目があり、そこに何か不思議な文字が書いてあった。N,Y,A,C,U,S...にゃかす?。なめとんのか?

と思ったらこれが超いかしたシェルなのでした!。

これこれ!。これでした。まさに探していたのこれでした。軽いし、日本語で一切揉めなくていいし、元から明らかに「Windows用シェル」で Linux 的な約束事が全然関係ないし、これは良い!。これが欲しかったです。感動して使い倒し中。

器用なあいつより、不器用なお前が好きだ

とりあえず、NT版UNIX-like tools(の欲しいのだけ) と less と grepsed だけ入れてご満悦。alias に xyzzy 加えてご満悦。ああ、自分にはこれで充分だったんですね…。