Windowsのコマンドプロンプトで、UNIXの「grep -E」「egrep」コマンドに似たコマンドがあると聞き、早速調査してみました。

「netstat」コマンドを使用した時に、あるIPアドレスの分だけを表示したい場合、UNIXだと「grep -E」や「egrep」を使えば簡単に絞り込みが出来るのに、Windowsのコマンドプロンプトを使用した場合はそれが出来なかったんですよね。(いや知らなかっただけですが・・・)

前回は「find」コマンドをご紹介しましたが、今回はさらに素晴しいコマンド「findstr」をご紹介します。

それでは「findsr」コマンドについて内容を確認していきましょう!

スポンサーリンク

findstrコマンドの使用方法

「findstr」コマンドは、Windows標準で導入されているので、特にアプリを導入する事無く使用する事が可能です。

まずは、ファイルの中身からある特定の検索文字列を抜き出す場合

findstrコマンドの書式
findstr▲検索文字列▲ファイル名
*▲はスペースですのでお間違えのないように!

netstatコマンドとかの結果を検索する場合だと

netstat▲|▲findstr▲検索文字列
*▲はスペースですのでお間違えのないように!

ポイントとして「find」コマンドと若干異なるのは、基本的に検索文字列をダブルコーテーションで囲む必要が無い事はない事です。しかし空白文字を含んだり特殊文字を含む検索は囲む方がいいかもしれません。

「findstr」コマンドで使えるオプションは?

「findstr」コマンドで使えるオプションは、コマンドプロンプトから「findstr /?」で確認できますが、一応サンプルを載せておきます。

===========================================
c:\>findstr /?
ファイルから文字列を検索します。

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
        [/F:ファイル] [/C:文字列] [/G:ファイル] [/D:ディレクトリ一覧]
        [/A:色属性] [/OFF[LINE]] 文字列 [[ドライブ:][パス]ファイル名[ …]]

  /B           行の先頭にあるパターンを検索します。
  /E           行の末尾にあるパターンを検索します。
  /L           検索文字列をリテラルとして使用します。
  /R           検索文字列を正規表現として使用します。
  /S           現在のディレクトリとすべてのサブディレクトリから一致する
               ファイルを検索します。
  /I           検索するときに大文字と小文字を区別しません。
  /X           完全に一致する行を出力します。
  /V           一致しない行のみを出力します。
  /N           一致する各行の前に行番号を出力します。
  /M           ファイルに一致する行があるときに、ファイル名のみを出力します。
  /O           一致する各行の前に文字オフセットを出力します。
  /P           印刷不可能な文字を含むファイルをスキップします。
  /OFF[LINE]   オフライン属性が設定されたファイルをスキップしません。
  /A:属性      2 桁の 16 進数で色属性を指定します。"color /?" を参照してくだ
               さい。
  /F:ファイル  指定したファイルからファイル一覧を読み取ります (/ を指定する
               とコンソール)。
  /C:文字列    指定された文字列をリテラル検索文字列として使用します。
  /G:ファイル  指定されたファイルから検索文字列を取得します (/ を指定する
               とコンソール)。
  /D:ディレクトリ
               セミコロンで区切られた検索されるディレクトリ文字列テキストの
               一覧を検索します。
  [ドライブ:][パス]ファイル名
               検索するファイルを指定します。

複数の文字列を検索する場合には、引数 /C を使わず、各文字列をスペースで区切ります。たとえば、FINDSTR "hello there" x.y と指定した場合は、ファイル x.y で "hello"または "there" が検索されます。
これに対して、FINDSTR /C:"hello there" x.y と指定した場合はファイル x.y で"hello there" が検索されます。

正規表現クイック リファレンス:
  .            ワイルドカード: 任意の文字
  *            繰り返し: ゼロ個以上の直前の文字またはクラス
  ^            行位置: 行頭
  $            行位置: 行末
  [class]      文字クラス: セットの任意の 1 文字
  [^class]     逆クラス: セット以外の任意の 1 文字
  [x-y]        範囲: 指定した範囲の任意の文字
  \x           エスケープ: メタ文字 x のリテラル使用
  \<xyz        単語位置: 単語の先頭
  xyz\>        単語位置: 単語の終わり

FINDSTR の詳細な正規表現に関しては、オンライン ヘルプのコマンド リファレンスを参照してください。
===========================================
findstrコマンドのオプション

正規表現の使い方についてはココでは割愛します。別途調べてみてください。

スポンサーリンク

「netstat」コマンドの結果を絞り込んでみよう!

では私めが一番使用する「netstat」コマンドで絞込みをやってみます。

「findstr」で2つの検索したい文字列を同時に絞り込みます。ここでは状態が「ESTABLISHED」「CLOSE」になっているものを絞り込んでいます。

実行コマンド:
netstat -ant | findstr "ESTABLISHED CLOSE"

検索文字列を2つ同時に絞込み

「findstr」コマンドにはさらに便利な使い方が隠されています。

コマンドのオプションをしっかり身につけて便利に使いこなしましょう。