2008年8月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

最近のモノ

Powered by TypePad

2006-09-28

mg の新機能

変更したのはもう去年のことだが、今使っている mg には、これまでとまったく違う検索機能が追加されている。

mg に限らず grep 系のコマンドでは、検索エンジンのような指定がしにくい。たとえば foo と bar の両方が含まれている行を検索しようとすると案外面倒なのである。普通はパイプを使ってこんな風にするのだろうか。

% grep foo file | grep bar

mg で1回でこれを実行するとすれば、

% mg -e 'foo.*bar|bar.*foo'
という具合か。でも、文字列の数が増えてくるとパターンが極めて複雑になってしまう。

先読みを使うとこんな風にも書ける。

% mg -e '(?=.*foo)(?=.*bar)'
これはこれで、なかなかご機嫌な使い方だ。 さらに buz を含まない行を探したければこう書けばいい。
% mg -e '(?=.*foo)(?=.*bar)(?!.*buz)'

しかし、bar と foo を含んで bar を含まないパラグラフを探したいとかいうと、なかなか面倒なのだ。 というわけで、それをもっと簡単に指定できる機能を実現してみたのである。 最初は必要があって追加した機能だが、その後なかなか使う機会がなくて、リリースに至らずにいる。

続きを読む "mg の新機能" »

2006-09-27

mg の Unicode 対応

リンク: log.utashiro.com: mg-5.0.1.3

ずいぶんと前のブログにコメントすいません。 文字が UNICODEの実体参照になっているテキストファイルは フィルタをかまして検索できるようになるのでしょうか?

実体参照というのは意味がわかりませんが、Unicode には特に対応していないのです。
偶然使える機能はあるのかもしれません。
検索前にフィルタで EUC とかに変換するのであれば -z オプションを使えばできます。

そういえば未リリースの手元のバージョンでは -z は --if オプションに変更されています。
ちょっと修正規模が大きいのでちゃんと整理できていなくてリリースしていません。

普段 MacOS を使っているので使えた方が便利かもしれないとは思っていはいます。でも、単純なテキストファイルはあまりないので、どうせなら XML 対応と一緒かなあという感じです。

2005-01-10

mg-5.0.1.3

約3年ぶりにmg の新バージョンをリリースする。ファイルのダウンロードや、そもそも mg が何だかわからなくて、かつ何だか知りたい人は以下のリンクをどうぞ。

http://www.srekcah.org/~utashiro/perl/scripts/mg/

最近、翻訳の仕事をしているのだが、原文をテキストでもらっているので、それに訳文を加える形で作業をしている。訳語を確認するために、以前のテキストを検索することがよくあるが、原文にも出てくる言葉を探そうとするとマッチしすぎて不便である。

そこで、検索対象の範囲を制限するためのオプションを追加した。--exclude オプションでパターンを指定すると、そのパターンにマッチする部分は検索の対象からはずれるのである。あっても出てこないだけで、テキストの中には残っているので、行番号がずれるようなことはない。

たとえば、

mg --exclude '(?s)/\*.*?\*/' if *.c
のようにすると、C のコメント以外の部分からだけ if を探すことができる。逆に --include にすれば、コメントからだけ検索する。

これは大変便利なのだが、このオプションを使おうとすると、手で入力するのはあまり現実的ではない。ましてや、emacs の grep コマンドから使うのは大変。そこで、ユーザが自分自身で新しいオプションを定義できるようにしてみた。ホームディレクトリの .mgrc にオプション定義を書いておくと起動時に読んでくれる。これで複雑なオプションも簡単に使うことができるようになった。

さらに、--exlucde--include のオプションには、パターンだけでなくて関数も指定することができて、複雑なパターンは自分でプログラムを書いて範囲を生成する。実際、翻訳原稿の処理などはパターンで指定できるほど単純ではないので、プログラムを書くのである。このプログラムもやはり .mgrc に書くことができる。

実は blog を始めてみたのは、日記を書きたいからなんかじゃない。リリースしたプログラムなどの話題をするのに、メールよりもうまくできるんじゃないだろうかという目論見があったからだ。メーリングリストを使おうとしてみたが、これはどうもうまくいかなかった。理由は、作者が頑張らないせいだとは思うのだが。メーリングリストの内容を web で公開するというのも好きではない。だったら、最初から公開されている場所で議論すべきだというのがぼくの考え。個人宛のメールだと共有情報としての価値がないし、他の人が答えてくれれば、その方が助かる。さて、今度はどうなるか?

最近のトラックバック