※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


grep

unixでは良く使われるgrep、windows用を作ってくれている人がいました。
windowsでも使えると便利なので、使ってます。

目次


ダウンロード


インストール

ダウンロードしたファイルを解凍すると、readme.sjというテキストファイルがあり、そこにインストール方法が書いています。詳しくは、readme.sjを読んでください。
私の場合、grep.exeを c:\windows\system32 の下に置きました。

簡単な使用例

grep使用例1(検索にマッチした行の抽出)

テキストファイル「test.txt」の中に "34" という文字列があったらその行をコマンドプロンプトに表示する。
C:\tempにtest.txtがあります。
C:\temp>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 54A5-8EF0 です

 C:\temp のディレクトリ

2008/01/04  12:19    <DIR>          .
2008/01/04  12:19    <DIR>          ..
2008/01/04  12:20                48 test.txt

test.txtの中身は、以下のとおり。
C:\temp>more test.txt
1
12
123
1234
12345
a
ab
abc
abcd
abcde
1 a

では、grepで"34"の行だけを抽出してみましょう。
C:\temp>grep 34 test.txt
1234
12345

grep使用例2(検索条件が複数ある場合)

テキストファイル「test.txt」の中に "34"または"cd" という文字列があったらその行をコマンドプロンプトに表示する。
C:\temp>grep -E "(34|cd)" test.txt
1234
12345
abcd
abcde
Eオプションは、 Enhanced(機能拡張) の意味です。-Eを指定すると、egrepと同じ意味になるようです。このように指定することで、34かcdのような検索条件を指定することが可能となります。
34とcdの間にある|は、 または の意味です。shiftキーを押しながら¥マークを押すと出てきます(私のキーボードの場合)。

grep使用例3(検索文字列にスペースを含む場合)

テキストファイル「test.txt」の中に "1 a" という文字列があったらその行をコマンドプロンプトに表示する。
1とaの間には半角スペースがあります。
C:\temp>grep "1 a" test.txt
1 a
スペースを含む文字列を検索する際には、その文字列を""ダブルクォーテーションで囲みます。

grep使用例4(検索にマッチした行数の表示)

テキストファイル「test.txt」の中に "34" という文字列を含む行が何行あるか表示する。
C:\temp>grep -c 34 test.txt
2
2行あった。

テキストファイル「test.txt」の中に "cd" という文字列を含む行が何行あるか表示する。
C:\temp>grep -c cd test.txt
2

テキストファイル「test.txt」の中に "34"または"cd" という文字列を含む行が何行あるか表示する。
C:\temp>grep -E -c "(34|cd)" test.txt
4

grep使用例5(複数の検索対象ファイル)

テキストファイル「test1.txt」と「test2.txt」の中に "34" という文字列を含む行を表示する。
grepでは、検索対象ファイルを複数指定できます。以下の例のように複数のファイルをスペースで区切って並べればOKです。
C:\temp>grep 34 test1.txt test2.txt
test1.txt:1234
test1.txt:12345
test1.txt:1234
test1.txt:12345
test1.txt:1234
...省略...
test2.txt:aaaaaaaaaaaaaaaa34bbbbbb
test2.txt:cccc34bbbbbbbbbbbb
現在居るディレクトリ内のすべてのファイルを検索対象ファイルに指定したい場合は、ファイル名の代わりに * を指定します。
":n"を入力すると次のファイル、":p"を入力すると前のファイルを参照することができます。

Tshark+grepの使用例

grepはファイルを入力するだけではなく、標準入力から入力しgrepの条件に合わせて出力することが可能です。この機能を利用することで、Tsharkがコマンドプロンプトに表示する内容をgrepでフィルタできます。(このようなgrepの使い方は、unixな人たちにとって目新しいものではありませんが。)

Tsharkがキャプチャするデータの内、User-Agentだけを表示します。
C:\temp>tshark -i 4 -V | grep User-Agent:
Capturing on ORINOCO PC Card (Microsoft's Packet Scheduler)
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11\r\n
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11\r\n
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11\r\n
108 packets captured
^C
User-Agentは、HTTP GETリクエストヘッダに存在する情報であり、ブラウザの種類を示しています。
Tsharkの-Vオプションは、パケットのサマリではなく詳細を表示するためのものです。grepではこの詳細な表示の中にあるUser-Agent:という文字列を引っ掛けました。

上の表示から、HTTP GETリクエストは6パケットキャプチャできたことがわかります。その内3つのUser-AgentはMozilla/4.0でありMSIE 7.0(Internet Explorer7.0)、3つはMozilla/5.0(Firefox2.0.0.11)であることがわかります。

このようにTsharkをgrepと一緒に使えると、GUIのWiresharkでパケットをクリックして順番に見なくても、いろんなことが簡単にわかるかもしれません。

ドキュメント

Linuxのgrepとはまったく同じというわけにはいかないかもしれませんが、参考になります。