grep の選び方、使い方
open 2010-07-16 一部未完
grep (グレップ)は、UNIX上で発達したツール(プログラム)です。MS-DOS、WINDOWSにも移植されています。多くはフリーソフトとして公開され、自由に(無償、免責無保証)で使えます。
grep (グレップ)は、文字列検索ソフトです。複数のテキストファイルに対して、検索したい文字列を含む行を探します。
grepとはglobal に Regular Expression(正規表現)文字列を検索して print(表示)する、という意味で、この名前はその頭文字から作られています。
grepは、UNIXツールとして誕生した後、他のOSへも移植され、たくさんのバージョンがあります。ほとんどがフリーソフトとして公開されています。では、どのgrepを選べば良いのか!?それぞれに一長一短があります。また、各々は決して排他的ではありません。
WINDOWSの世界標準的エディタである秀丸エディタには、優れたgrep が内蔵してあります。タグジャンプ機能を考えれば、エディタ内蔵のgrepを使うのが、最も合理的です。K2エディタ、emeditor などにも、grep が内蔵してあると思います。
フリーソフトサイトvectorデザインなどでは、かなりの数のgrep がアップロードされています。すぐ次で、「jgrep を使う」としてご説明します。
コンソールとは、windows95、97、Meなどで言うDOS窓です。XP、Vista、7以降は、完全32bit対応のコンソールになりました。私は今でもコンソール画面と秀丸とをメインにPCを使っていますが、32bitコンソール対応のgrep の進歩があまりないのが残念です。かつて、MS-DOSの時代には、Ygrep という最強のgrep が存在しました。今私は32bit版のcgrep を使っています。
さて、一番のおすすめは、「1. grep 機能を持つエディタ(とくに秀丸エディタ)を使う」です。方法はあとで少し説明します。が、秀丸を使う(使いこなす)というのは、「MS-Word にべったり依存しない」ということも意味しています。現在、どこでもそうなっていますが、提出書類などがMS-Word形式のファイルで送られてきたりします。PCユーザとは、MS-Officeユーザ(ワード、エクセル、パワーポイント)を意味しています。そんな状況の現在において、「秀丸を使う」というのはハードルを高くしてしまうことにもなりかねない。というわけで、ここでは、上記2の「grep単独のプログラム、特にWINDOWS対応のgrepを使う」を使用例としてご紹介します。
Macintoshの場合。わたしはMACのパソコンを使ったことがないので分かりませんが、MAC用のgrepもあるはずです。そもそも現在MACは実質Linuxだそうですね。ならば、本家のUNIXにいっそう近いわけですから、あって当然です。 ベクターデザインでいえば、「検索置換ラクダX 1.0」というソフトなどが、これに当たるのでしょうか。(作者ご自身の紹介で)「かなり遅いです。ダメダメなインターフェイスです」などとありますが)。
また、同僚のMACユーザに聞いてみたところ、ローカルのデータへのアクセスは「スポットライト」という検索システムがOS標準で付いているようです。MACのファイルシステムに依存した、ローカル型の検索エンジンみたいなかんじでしょうか。インデックス化されているのでしょう、検索速度はめちゃくちゃ早い。日本語解析システムも内蔵しているらしく、一般的なシソーラス検索(あいまい検索、同義語検索)などはできるようにみえます。正規表現が使えるかどうかは、同僚に聞いてもネットで調べても(Wikipediaを見た程度だが)分かりません。
vectorデザインには、様々なgrep がアップロードされています。みな優れたソフトウェアです。ここでは、三浦淳さんが作られたjgrepというものを使う事にします。基本機能から応用的な機能までを充足した上で、かつ馴染みやすく使いやすい、と私が判断申上げました。 ここに飛び、 http://www.vector.co.jp/soft/dl/win95/util/se174779.html
「このソフトを今すぐダウンロード」というボタンをクリックします。 指示に従って、ハードディスクに保存します。
ヴァージョンアップしていたりして、複数あれば、新しい日付のものを選べば良いでしょう。現在(2010-07-15)の最新ヴァージョンは、JGREP2.05 です。
インストールも簡単です。ダウンロードしたファイルをダブルクリックするだけで、プログラムが展開されます。レジストリなどはいじっていない、綺麗なプログラムです。必要なファイルも少なく、極めてシンプルです。フォルダごと、好きな場所に移動しておきます(移動させず、そのままでも構いませんが)。
ダブルクリックして何も起こらない場合(動作させるプログラムは何か?と聞かれてしまう場合)
ダウンロードしたファイル(jgrep205.lzh)は、lha形式でアーカイブされています(複数のファイルを一つのファイルに圧縮・結合してある)。これを、使用状態に展開(復元)するには、lhaというプログラムをパソコンに先にインストールしておく必要があります。lhaプログラムも現在は多数あるようです。私は、lhacaを使っています。 http://www.vector.co.jp/soft/win95/util/se026842.html これもやはり、Vectorデザインにあります。ここからダウンロードし、ダブルクリックして、指示に従ってインストールします。その後、再びjgrep205.lzh をダブルクリックします。
jgrep に限らず、grepには基本的な操作概念があります。まず、これを確認しておきましょう。本ページの最初に次のように書きました。
「grep (グレップ)は、文字列検索ソフトです。複数のテキストファイルに対して、検索したい文字列を含む行を探します。」
自分のパソコン上(ローカル上)にあるデータ・ファイルのうち、どのファイルを検索するのか?ということです。ファイルは通常、c:\dir1\dir2\file.txt などと絶対パス(ドライブ+フォルダ名+ファイル名)で指定します。が、windowsの場合は、視覚的にフォルダをたどっていけば良い。
検索するファイルは、テキストファイルでなければなりません。文字コードは、シフトJISのほか、EUC、ユニコードなどでも大丈夫です。
日本語(シフトJIS、ユニコードなど可)のほか、アルファベットも検索できます。英語は1byte文字でしょうし、複雑な欧州語の場合は、ユニコードでしょうか。ともかく対応しています。「文字列」という言い方はパソコン風ですね。普通は、単語とか句とか言います。
検索すべき文字列に、正規表現が使えます(正規表現が使えるからgrepというのです)。google検索などでは、正規表現が使えないようです。信じられません。正規表現については後述します。
検索する際に、細かな指定(パラメータ指定)ができます。パラメータの種類は、grepぞれぞれに依存します。多彩なパラメータを持ったgrep は、やはり優れたgrepといえるでしょう(あとは、検索速度ですね)。
jgrepの場合、アルファベットの大文字小文字の同一視検索などをしてくれます。1.1.7(古いヴァージョン)のほうでは、同意語検索(シソーラス検索)までフォローしていますね。古いヴァージョンのほうが良いのではないか。
この他、日本語の検索をする場合だと、平仮名・片仮名の同一視、漢字の新字体と旧字体の同一視、改行をまたぐ単語の検索、などが必要になるでしょう(秀丸ではサポートされています)。
注:コンピュータにおける文字列検索とは、単に文字コードの羅列を検索しているだけです。「りんご」を検索文字列としたとします。これは、シフトJISの文字コード(82E8 82F1 82B2)のパターンをデータファイルから探しているだけのことであって、「りんご」または「りんごを探した」というクオリアをコンピュータがもっているわけではありません。「リンゴ」(838A 8393 8353)も「林檎」(97D1 8CE7)も素通りします。これではあまりにバカなので、いろんなパラメータを付けて、便利に使うわけです。UNIXのgrepはそれほどでもありませんでしたが、1990年代、MS-DOS時代のgrepはすでに完成の域に達して、便利になっています。
検索結果は、その文字を含む一論理行を表示します。論理行とは、データファイルにおける改行コードから改行コードまでです。
jgrep.exe (またはjgrep2.exe)がプログラム本体です。これをダブルクリックすれば立ち上がります。
次のそれぞれを入力してから、「虫めがね」のアイコンをクリックします。
検索文字列 検索したい文字を入力します。
検索ディレクトリ 検索したいファイルが入っているフォルダを指定する。左側のフォルダツリーから視覚的に選べば良い。
ファイルマスク 当該ディレクトリにあるファイルを、ファイル名によって、検索対象とするか否かを工夫できます。半角の*(アスタリスク)? (ハテナ)が使えます。*はジョーカー(ワイルドカード)で、「どれでも」(完全なる代補)という意味です。?は一文字分の代補です。これらを使って、ファイル名にマスキングするわけです。(例)*.*(すべてのファイル)。yo*.txt (冒頭にyo があり、拡張子が txt のファイル)。txtはテキストファイルの拡張子ですから、*.txt としておけばまずは便利・安心でしょう。
サブディレクトリも検索対象 当該ディレクトリの中にあるディレクトリまで掘り下げて(再帰的に)検索するかどうか、です。
ディレクトリマスク 上をチェックした場合、すべてのサブディレクトリを掘り下げるのではなく、ディレクトリの名前によってマスキングできます。
次のように入力して、虫眼鏡のアイコンをクリックすると……。
検索結果が表示されました。ファイル名、行数、一論理行が表示され、検索文字列が黄色になっています。(まあ、これだけだと、なんてことはない感じもしますね。具体的にそのファイルを開いて、中身をみる必要があったりするでしょうから。そのための、タグジャンプの設定をしましょう)。
「ツール(T)」から「環境設定(E)」をクリックします。すると、次のようになりますので、エディタプログラムを設定してみます。 とりあえず、windows標準のnotepad.exe (メモ帳)を設定してみます。(が、メモ帳は行指定でのファイルのオープンができません。ゆえに、タグジャンプができません)。
次の例は、秀丸エディタを指定したものです。これなら、タグジャンプができます。「設定」を押して、さきほどの検索結果に戻ります。
そして、表示したい行を選んでダブルクリックすると、当該ファイルを開き当該行にカーソルが移動しています。yo005.txt の29行目で開きました。
jgrep自体は、シンプルながら重要機能を充足していてすばらしいのだが、タグジャンプのためのnotepadがこれでは、結局、エディタを使わざるをえない。ならば、最初からエディタ内蔵のgrepを使うにしくはない。これが結論のようです。
秀丸エディタはシェアウェアといって使用料を払って使うソフトです。しかし税込み4200円です(激安でしょう)。買う価値はあります。「秀まるおのホームページ」に飛んで、秀丸エディタをダウンロードして、指示に従ってインストールします。お金は、あとから銀行振り込みなどで払えます。
http://hide.maruo.co.jp/software/hidemaru.html
インストールの際、キーアサインを選ぶよう指示されるかと思います。どれを選んでも構わないはずですが、「VZlikeキー」がおすすめです。(あらかじめ、機能設定を施してあるキーの種類が多いため)。
メニューバーの「検索(S)」から「grepの実行(G)」を選びます。操作概念は、先述のjgrep と同じですから、必要な項目を入力します。
パラメータがたくさんありますが、これによって、多彩・繊細・自覚的な検索が可能となります。特に便利なのは、「あいまい検索の設定」です。「あいまい検索(F)」をチェックし「設定(Y)」をクリックすると、「あいまい検索の設定」という窓が開きます。「最大改行数(M)」を3などにしています(検索文字列が改行コードをまたいでいても検索できます)。また、「カスタム1」に、fuzzy.txt というファイルを設定しておくと便利です。ここからダウンロードしてください。fuzzy.txt。新旧漢字の同一視データです。このデータにしたがって、新旧漢字を同一視してくれます。
このくらいの機能がそろっていれば、学術レベルにたえうる検索ソフトと言えるでしょう。
検索結果が、リスト表示されます。一行しか表示されていませんが、「このファイルのその部分が具体的に見たいな」ということがあるはずです。そこまでカーソルを移動して、メニューバーの「その他」から「タグジャンプ」を選びます。すると、その当該ファイルが開きます。
「エディタは難しい」などというのは、MSワード(ワープロソフト)を使わせようというマイクロソフトの陰謀に過ぎません。鈍重で高価なワープロソフトでなく、軽快で高機能・廉価なエディタを使って、すべてのパソコン操作は可能です。エディタが少々苦手なのは、印刷ですが(文字のフォント・ポイントを変え、振り仮名を付ける等)、私はエディタとTeX(テフ、組み版ソフト。PDFにも変換出来ます)を使っています。
エディタの基本機能として、いくつかあげておきます。
文字を打つとき、本来マウスは必要有りません。すべての操作をキーボードだけで行えるのです。マウスの操作は質的持続ですが、キーボードは量的継起です。あらゆるコマンド、プルダウンメニューなども、すべてキーボードで操作します。こうしてPCは、純粋記憶を不要とする、身体の感覚―運動機構の一部となるのです。
grep の起動(すなわち文字の打鍵でなく、コマンドの打鍵)も、[Alt] を押しながら「S」を押し、次に「G」を押せば良いのです。
こうした、コマンドの打鍵の体系をキーアサインといいます。秀丸では、これを新規に登録したり変更したりできます。
エディタにもワープロにも、最初から便利な機能が附属していたりします。が、PCができるあらゆる機能を積み込むことはできません。PCに可能なあらゆる機能は無限だからです。
ワープロにはまずないと思いますが、エディタはプログラム言語を内蔵しています。エディタのプログラム機能を、マクロといいます。ユーザは、必要な機能を自分でプログラミングして、新たなエディタの機能として追加することが可能です。また、秀丸サイトには、多数のマクロが作られ、アップロードされています。そこからダウンロードしてきて、使う事ができます。
パソコンを使っていて、「面倒くさいな」「不便だな」と思った場合、それを解消する方法は実は必ずあるはずです。エディタならばそれが自前で可能です。
※ 正規表現では、文字そのものの検索ではなく、パターンの検索が出来る。 UNIXで培われた技術だが、grepはこれを標準でサポートしている。 以下の正規表現の方式(1〜9)を、いろいろ組み合わせてつかいましょう。 「マッチする」=検索パターンに合致すること。 1 c 特殊な意味をもたない任意の文字c。その文字自身を意味する。 (例1)た 「た」という文字。 (例1)たね 「たね」という文字列。 2 [...] ...のうち、どれか1文字 a-zのような範囲の指定もできる(文字クラス)。 (例1)給[はひふへ] 活用語「給ふ」の一括検索。 「給」のあとに「はひふへ」どれか1文字がくるパターン。 (例2)[a-z] 1Byte文字の英小文字 [A-Z] 1Byte文字の英大文字 [0-9] 1Byte文字の数字 [a-zA-Z0-8] 1Byte文字の英数。ただし9は除く [A-Z] 2Byte文字の英大文字 [あ-んア-ン] 2Byte文字の仮名文字 [亜-龠] 2Byte文字の漢字 (例3)夏の[亜-龠] 「夏の」のあとに漢字が来る。 3 [^...] ...にない任意の1文字 範囲指定もできる(文字クラス). ]は最初に、-は最初または最後に書くことでその文字自身となる. (例1)[^せ]給[はひふへ] 補助動詞以外の「給ふ」 (例2)[^亜-龠] 漢字以外 4 (A|B) AまたはBの文字列。(AとBとが複数の文字から成り、文字数が異なる場合につかう) (例1)(秋|あき) 秋、あき。 (例2)(秋|あき)の[田た] 秋の田、秋のた、あきの田、あきのた 5 . 任意の1文字(ドット)。 (例1)給.時 給ふ時、給水時、給食時間、など (例2)給..時 給ふる時、給水3時、給食の時間になって、など 6 r* 0回以上のrの繰り返し。 (例1)ですね*。 です。ですね。ですねねねね。 (例2)朱.*色 朱色、朱い色、朱や藍の色彩 (例3)濃い[朱藍]*色 濃い朱色、濃い藍色、濃い色 7 r+ 1回以上のrの繰り返し。 (例1)ですね+。 ですね。ですねねねね。 (例2)暑.+夏 暑い夏、暑くないのに夏、 (例3)(薄い|濃い)+[朱藍]色 薄い朱色、薄い藍色、濃い朱色、濃い藍色 8 ^ ^で始まるときには,行の先頭にあるパターン (例1)^秋の田の 行頭の「秋の田の」 9 $ $で終わるときには,行の終りにあるパターン (例1)[ふ降]りつ[つゝ]$ 我が衣手に雪は「降りつつ」 富士の高嶺に雪は「ふりつつ」