文字列で一致検索する findstr

前回は文字列の一致検索を実施するfindというコマンドを取り上げた。Linuxのfindコマンドではなく、どちらかというかgrepコマンドに近い処理を行うコマンドだ。指定したファイルや接続したパイプラインを流れてくるテキストデータから指定した文字列が含まれている行を出力するといった動作をする。

Windowsにはfindコマンドをさらに拡張したものとしてfindstrコマンドが用意されている。findコマンドで指定できるのは文字列のみだったが、findstrコマンドでは正規表現やパラメータを通じてもっと複雑な一致指定を行うことができる。

findstrコマンドの基本的な使い方

findstr [/b] [/e] [/l | /r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/f:ファイルパス] [/c:"文字列"] [/g:ファイルパス] [/d:ディレクトリリスト] [/a:色属性] [/off[line]] "文字列" [ドライブ:][ファイルパス][ ...]

Linuxであればfindstrコマンドの処理もgrepコマンドで実施する。grepコマンドには文字列として正規表現を使えるので、複雑な一致指定を行うことができる。

findstrコマンドで使用できる主なパラメータとその意味は次のとおり。

パラメータ 内容
/b 行頭が対象文字列だった場合に一致
/e 行末が対象文字列だった場合に一致
/l 指定された文字列を文字列通りに処理
/r 指定された文字列を正規表現として処理(デフォルト)
/s カレントディレクトリとすべてのサブディレクトリを検索
/i 文字列の大文字と小文字を区別しないで一致
/x 一致した行のみを出力
/v 一致しなかった行のみを出力
/n 一致した行の行番号を表示
/m 一致したファイルのファイル名のみを出力
/o 一致した行の前にキャラクタオフセットを出力
/p 印刷不可能文字を含むファイルをスキップ
/off[line] オフライン属性セットを持つファイルをスキップしない
/f:ファイルパス 指定したファイルからファイルリストを取得して利用
/c:”文字列” リテラル検索文字列として指定した文字列を使用
/g:ファイルパス 指定したファイルから検索文字列を使用
/d:ディレクトリリスト 指定したディレクトリリストを検索。ディレクトリリストはセミコロンで区切って指定する
/a:色属性 2桁の16進数で色属性を指定。1文字目が背景色、2文字目が前景色

パラメータ/aに指定できる色指定は次のとおり。

16進数
0
1
2
3 水色
4
5
6 黄色
7
8
9 明るい青
A 明るい緑
B 明るい水色
C 明るい赤
D 明るい紫
E 明るい黄
F 明るい白

findstrコマンドで指定できる正規表現は次のとおり。

正規表現 内容
. ワイルドカード。任意の文字に一致
* ひとつ前の文字またはクラスを0回以上繰り返す指定
^ 行頭
$ 末尾
[クラス] 文字集合の中のどれかの文字に一致 
[^クラス] 文字集合の中のどの文字にも一致しない
[x-y] 範囲指定で集合を指定
\x メタ文字をそのままの文字として指定
\<文字列 単語のはじまり
文字列> 単語の終わり

grepコマンドと違ってfindstrコマンドで使用できる正規表現は限られたものだが、Windowsのfindコマンドと比べれば大きな違いだ。findstrコマンドを使用することでgrepコマンドのような強力な文字列フィルタリングが可能になる。

findstrコマンドの使用サンプル

findstrコマンドを使ってみよう。たとえば、dirコマンドを実行すると次のような結果が得られるとする。

dirコマンドの実行結果

findstrコマンドに文字列を指定すれば、その文字列を含んだ行のみが出力されるようになる。

findstrコマンドで出力をフィルタリング

もっと明示的に正規表現を指定してみよう。もっとも使いやすいのは行頭を意味する^と行末を意味する$だ。これを指定する文字列の先頭や末尾に指定することで行頭または行末への一致として利用することができる。

正規表現として行頭や行末を指定して場合

[^]で文字集合に一致しないものだけを出力させると次のようになる。これもよく使う正規表現の利用方法のひとつだ。

正規表現で文字集合に一致しないものを表示した場合など

こんな感じでfindstrコマンドでは正規表現を使ってより複雑な文字列一致を行うことができる。Linuxのgrepコマンドのように強力な正規表現指定が使えるわけではないが、これくらい指定できればかなり多くのことができる。

覚えてしまおうfindstrコマンド

Linuxに限らずUNIX系オペレーティングシステムを扱うとなると、grepコマンドはなくてはならないコマンドのひとつだ。このコマンドが使えると使えないとでは、ターミナルでの作業効率がかなり違ってくる。正規表現も基本的なものはすべて覚えておきたい。知っていると知っていないとではコマンドの利用の幅が段違いだからである。

そんなわけで、grepコマンドほどではないによせ、似たようなことができるfindstrコマンドはぜひとも覚えておきたい。このコマンドが利用できると、欲しいところだけ取り出すといったことができ、コマンドプロンプトの利用効率がだいぶ上がってくる。ぜひとも覚えておきたいコマンドだ。

参考資料