正規表現を使ってファイルから文字列を検索 findstr (1/2)

more
初心者でも簡単にできるコマンドプロンプトです。
今回は「findstr」というコマンドを解説します。
このコマンドは、少し前にご紹介したfind というコマンドの高機能版で、行えるのはfindと同じような事(ファイル内の文字列を検索)ですが、 「findstr」では、findと比べてより詳細な検索を行う事が出来るようになっています。
とは言っても、使い方自体は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]] 文字列 [ファイル名]

/b 行頭にあるパターンを検索
/e 行末尾にあるパターンを検索
/l 検索文字列中の「.」や「*」や「^」などをテキストとして使用
  (リテラル検索文字列として使用)
/r 検索文字列を正規表現として使用
/s 現在のディレクトリと全てのサブディレクトリから一致するファイルを検索
/i 検索するときに大文字と小文字を区別しない
/x 検索文字列と完全に一致する行を出力
/v 検索文字列と一致しない行のみを出力
/n 検索文字列と一致する各行の前に行番号を出力
/m 検索文字列と一致する行がある場合に、ファイル名のみを出力
/o 検索文字列と一致する各行の前に文字オフセットを出力
/p 印刷不可能な文字を含むファイルの検索をスキップ

/f:ファイル名 指定したファイルから検索対象のファイル一覧を読取 
/c:文字列 指定された文字列をリテラル検索文字列(一まとまりの文字)として使用
/g:ファイル名 指定されたファイルから検索文字列を取得 
/d:ディレクトリ名 指定されたディレクトリ内のファイルを検索。
          ディレクトリは複数指定が可能(セミコロンで区切る)
/a:色属性 2桁の16進数で色属性を指定。色属性についてはcolorコマンドを参照
/OFF[LINE] オフライン属性が設定されたファイルも検索対象に

★ファイル名に / を指定するとコンソール入力されたファイルを検索対象に
このページのトップへ
このfindstrとは、指定したファイルより指定した文字列を含む行を検索し、
表示させる事が出来るコマンドです。
上にも書いたとおり、findstrfindの高機能版であり、 使い方などもほぼfindと同様。通常の検索ではfindと同じように使用する事ができます。
しかしfindstrでは、findで検索する時のように検索文字列を 「"(ダブルクォーテーション)」で囲む必要はなく、 検索対象とするディレクトリを複数に渡って指定できるなど、findにはない機能もいくつか備えています。
そしてfindstrがfindと大きく異なる点は、正規表現を使った検索を行えるという所。
正規表現とは?
例えば「行頭や行末に数字を含む」行や「特定の文字列で始まる」行など、 検索文字列と正確に一致する文字列を含む行を探すのではなく、 文字列中のある一部分のみの条件を指定した検索を行いたい時、 findstrではその文字列の条件を正規表現によって指定し、検索する事ができます。
通常の検索では単純に文字列を指定して検索していましたが、 正規表現を使った検索では、 文字列のパターンを特殊文字(メタキャラクタ)を組みあわせて指定し、 そのパターンを元に文字列の検索を行う事ができるのです。
このページのトップへ
以下は、findstrで使用する正規表現の為の特殊文字(メタキャラクタ)一覧です。
.     ワイルドカード 任意の1文字
*     直前の文字またはパターンを0回以上繰り返す
^     行の先頭にマッチする
$     行の終わりにマッチする
[class]  []内の文字の任意の1文字にマッチ
[^class]  []内の文字以外の任意の1文字にマッチ
[x-y]   指定した範囲内の任意の1文字にマッチ
¥x     特殊文字「x」をテキスト文字として扱う(エスケープ)
¥<xyz   xyzで始まる単語にマッチ
xyz¥>        xyzで終わる単語にマッチ
サンプルにも入らないうちに色々とややこしそうなものが出てきましたが、 とりあえず正規表現を使ったfindstrの使用法、 またメタキャラクタ(特殊文字)そのものについては後々詳しく説明する事にして、 ここではとりあえずそれ以外の使用例をあげてみることにします。
このページのトップへ

では、まずはじめの例です。
サンプルファイルとして、以下のsample.txtを使用します。
findstrの使用例

findstrの使用例
C:¥sample>findstr パソコン sample.txt
sample.txtからパソコンという文字列を検索しました。 findでも同様に検索する事が出来ますが、findは検索文字列を "(ダブルクォーテーション)で囲まなければならなかったのに対し、 findstrではその必要はありません。
以下のように検索結果が表示されました。
Lenovo(デスクトップパソコン) (8)
Lenovo(ノートブックパソコン) (17)
hp(デスクトップパソコン) (12)
hp(ノートブックパソコン) (25)
東芝(ノートブックパソコン) (24)
パソコン工房 (3)
静音パソコン (1)
タブレットパソコン (1)
BTOパソコン (6)
このページのトップへ

findstrの使用例
C:¥sample>findstr /d:C:¥bbb;aaa パソコン *.txt
/d:オプションを使用し、複数のディレクトリを指定しています。
検索ファイルには*.txt(全てのテキスト)を指定。
ここではC:¥bbb(Cドライブ直下にあるbbbディレクトリ) と、aaa(sampleディレクトリ内にあるaaaディレクトリ)内のテキストファイルより、 パソコンという文字列を検索します。
findstrの使用例
以下のように結果が表示されました。
パソコンという文字列を含む行だけが表示されています。
  C:¥bbb:
qq.txt:パソコン工房 (3)
  aaa:
sample.txt:Lenovo(デスクトップパソコン) (8)
sample.txt:Lenovo(ノートブックパソコン) (17)
sample.txt:hp(デスクトップパソコン) (12)
sample.txt:hp(ノートブックパソコン) (25)
sample.txt:東芝(ノートブックパソコン) (24)
sample.txt:パソコン工房 (3)
sample.txt:静音パソコン (1)
sample.txt:タブレットパソコン (1)
sample.txt:BTOパソコン (6)
このページのトップへ

findstrの使用例
C:¥sample>findstr パソコン find.txt sample.txt
このように複数のファイルを指定する時は、ファイル名をスペースで区切って入力します。
結果は以下の通りです。
find.txt:パソコン工房 (3)
sample.txt:Lenovo(デスクトップパソコン) (8)
sample.txt:Lenovo(ノートブックパソコン) (17)
sample.txt:hp(デスクトップパソコン) (12)
sample.txt:hp(ノートブックパソコン) (25)
sample.txt:東芝(ノートブックパソコン) (24)
sample.txt:パソコン工房 (3)
sample.txt:静音パソコン (1)
sample.txt:タブレットパソコン (1)
sample.txt:BTOパソコン (6)
このページのトップへ

findstrの使用例
C:¥sample>findstr "パソコン 記事 プロンプト" sample.txt
findstrでは、複数の文字列を指定して検索する事もできます。
この場合、行に「パソコン」「記事」「プロンプト」のうちのどれかが含まれていれば 検索結果として画面に表示されます。(or検索
なお、複数の文字列を指定する場合には、 検索文字列はスペースで区切って入力し、全体を "(ダブルクォーテーション)で囲んで下さい。
以下、実行結果です。
findstrの使用例
Lenovo 【製品レビュー&記事】 (16)
HP 【製品レビュー&記事】 (15)
東芝 【製品レビュー&記事】 (9)
Panasonic【製品レビュー&記事】 (4)
EIZO 【製品レビュー&記事】 (2)
Lenovo(デスクトップパソコン) (8)
Lenovo(ノートブックパソコン) (17)
hp(デスクトップパソコン) (12)
hp(ノートブックパソコン) (25)
東芝(ノートブックパソコン) (24)
パソコン工房 (3)
静音パソコン (1)
タブレットパソコン (1)
BTOパソコン (6)
初心者でも簡単コマンドプロンプト (2)
このページのトップへ

findstrの使用例
C:¥sample>findstr /n /c:"INPUT DATA: ¥n" sample2.txt
特殊文字(メタキャラクタ)を含む文字列を検索したい時には、 /cオプションを指定します。
また、/cオプションを指定したここでは、 "(ダブルクォーテーション)内の検索文字列は、 一まとまりの文字列として扱われる為、上の例では 「INPUT DATA: ¥n」が検索される事になります。
/nは行頭に行番号を表示するオプションです。
以下、実行結果です。
findstrの使用例
7:INPUT DATA: ¥n

このページのトップへ
今回はとりあえずここまでです。
正規表現を使ったfindstrの検索については、
また次回、いつものように例を用いながら解説しようと思います。
ちなみに正規表現とfindstrを用いた文字列検索については、 実はかなり前に「正規表現とは?」 という記事で扱った事があり、その記事にも幾つかのサンプルを掲載しています。
なので、正規表現の細かい説明については再度書こうかどうしようかと迷ったのですが、 前回のものはかなり説明を省いた内容となっており、まずそれだけでは正規表現を理解する事はできないので、 やはりもう少しきちんとした内容の記事を書こうと思っています。
そういうわけで、次回も一応findstrの解説ですが、もしかすると 正規表現寄りの記事になってしまうかもしれません。 (或いは、長くなりそうなら正規表現だけ別記事にしてしまうかもしれません。)
ではまた次回、宜しくお願い致します。
このページのトップへ
リテラル
正規表現

※キーマンズネットのIT単語帳ページへ飛びます。
様々なIT専門用語の意味を詳しく知る事ができます。
サイト上の情報利用により生じた損害等には一切責任を持ちません
2009.09.29 Tuesday | 初心者でも簡単コマンドプロンプト | comments(0) | trackbacks(0) | 記事URL
▲PAGETOP
同カテゴリーの記事 最新5件
Comment:
Add a comment:











※コメントは管理者が承認後表示されます。
Trackback:
http://shop.denkaseihin.com/trackback/587
※記事と関連性が低い等、管理人が不適当と判断したものについては削除させて頂きます。
新着記事
CATEGORY
まめ知識
COMMENT
  • 巨大なサイズのファイルも一瞬で削除出来るコマンド del
    denkaseihin (04/15)
  • 巨大なサイズのファイルも一瞬で削除出来るコマンド del
    原田 (04/14)
  • HPの h8-1080jpレビュー 内蔵GPU〜GTX580まで可のSandy Bridge搭載マシン
    denkaseihin (09/18)
  • HPの h8-1080jpレビュー 内蔵GPU〜GTX580まで可のSandy Bridge搭載マシン
    ヨーイチ (09/18)
  • HPの h8-1080jpレビュー 内蔵GPU〜GTX580まで可のSandy Bridge搭載マシン
    denkaseihin (09/14)
  • HPの h8-1080jpレビュー 内蔵GPU〜GTX580まで可のSandy Bridge搭載マシン
    MN (09/13)
  • Firefoxでcookieが保存されないという現象が発生したら
    denkaseihin (10/28)
  • Firefoxでcookieが保存されないという現象が発生したら
    KEKE (10/27)
SMTWTFS
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< June 2019 >>
RSS
ARCHIVES
MOBILE
qrcode
LINK

Copyright © 2005 - denkaseihin. All Rights Reserved.