2005年11月17日

文字列検索コマンド find

膨大な住所録の中から、例えば 「静岡県に住む人をリストアップしたい」 なんて作業はありがちだよね。そんなとき、どうしてますか?

まあ、大概はデータベースから検索で一発なんだろうけどね。でも、いざって時にも、こんなコマンド知ってたら安心だよね。

指定したキーワードを含む行を全て書き出してくれるコマンドだよ。

例によって、find /? を実行してみよう。type 程じゃないが、至って簡潔なコマンドであることが判るだろう。

オプション、キーワード、ファイルを指定するだけだ。先ほどの例ならば、find "静岡県" (ファイル名) と入力し、実行してやればいい。

あっ、日本語入力出来てる? 「コマンドプロンプト」 では、Alt + 漢字キー じゃないと切り替わらないよ。私自身もしばらくは知らなかったことなんだよね ^^; まあ、私の場合はバッチのコメント以外ではまず日本語を使うことがないんだけど・・・

さて、どおですか? ぜひ、何かで試してみてね。

で、もっと絞りたい場合もあるよね。例えば 「千代田」 の文字列で AND 検索したい、でも、「東千代田」 は省きたい、なんてワガママな検索・・・

これなら 「パイプ」 で繋いじゃえば可能なんだよ。

find "静岡県" (ファイル名) | find "千代田" | find /v "東千代田"

としてやればいいんだよ。AND 検索なら、全部並べちゃえばいいんだね。OR 検索なら、それぞれの処理を別々に実行すればいいんだけど、重複を許さないとなると、既にピックアップされているハズの行を省いてあげないといけなくなるね。

ワイルドカードを使った検索がしたかったり、検索する文字列の含まれているファイル名が知りたい、といったような場合には、find よりも強力な findstr を使う。詳細は、例によって findstr /? を参照しよう。これが使えるようになると、かなり便利だ!

が、・・・・・・

この辺りに、コマンドプロンプトの限界も見え隠れしている。行単位でしか拾えないんだよね ^^; UNIX 系の シェル や、普通のプログラミング言語のように、文字列そのものをピックアップしたり、置換したりといった機能自体は持っていない。

しかし、for コマンドでの編集機能を思い出して欲しい。住所録などは、決まったフォーマットで記述されているハズだ。全てのフィールドを一旦変数に取り込み、それぞれに必要な処理を加え、再び結合して別ファイルに出力すれば、ある程度の編集は可能になる。

だけど・・・ 結構な書き込みが必要になるので、面倒くさい。他に手軽に出来る編集の方法がなきゃ仕方ないが、思い当たれば先にそっちを試したいところだね ^^;

おいおい、便利な機能の紹介じゃないのか?

あはは・・・(^^;; 確かにそうなんだけど・・・ この辺は弱い・・・
以前にも書いたと思うけど、実際のところ、「コマンドプロンプト」 って、既にある機能を連続して実行してくれる マクロ言語 といったほうが適切なんだよね。全く新しい機能を作ることは出来ない。
こう言ってしまうと、シェルやスクリプト言語なども同じような性質なんだけど、「既にある機能」 が極めて強力なんだ。UNIX 系は CUI が基本になるのに比べて、Windows は 「コマンドプロンプト」 のサポートさえ打ち切ろうとした背景があるから仕方ない部分もあるんだけどね。

あッ、でも Windows の擁護もしておかないとね。2007年には、UNIXのようにネットワークベースのサーバー・データ管理出来るような、新しいオブジェクトベースのコマンド・スクリプト言語 Monad が搭載されるらしい。期待してみたいところですね。

現状でも Windows Script Host っていう VBScript 系の言語が搭載されていますが、あまりにもマイナーですよね。私も興味は持っているのですが、なかなか勉強できないでいるところです。 「コマンドプロンプト」 ネタも底を尽いてきているので、このブログを進めるにあたって勉強しようと思ってはいるのですが・・・ (^^;


なんか話がそれちゃいましたね。


じゃあ、最後に使って面白いコマンドを紹介しておきます。

テキストファイルの中の相違点を見つけてくれるコマンドに fc というのがあります。例によって詳細は fc /? で確認してくださいね。

大きなテキストファイルをコピーして、その一方のファイルの中を数箇所を友達に変更してもらい、そしてその変更点をすぐに探し当ててあげましょう。きっと驚きますよ ^^



応援ポチ  お願いしま〜す。

posted by Woody at 02:52 | 静岡 ☀ | Comment(0) | TrackBack(0) | コマンドプロンプト
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL
http://blog.seesaa.jp/tb/9432623
※特に許可した場合を除き、一方的な TrackBack は
  SPAM として削除いたします。ご了承ください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。