目次
- 「findstr」コマンドの使い方
- 指定した文字列の行番号も表示する
- 指定した文字列を含まない行を表示する
- 大文字と小文字を区別しない
- ワイルドカードを使った文字列の検索
- 先頭・末尾が指定文字列と一致する行を検索
- 複数の検索文字列を指定する
- 複数のファイルを検索対象とする
- フォルダ内全てのファイルを検索対象とする
- 完全に一致する行のみを表示する
- スペースやワイルドカード、その他特殊文字を検索文字列に使う
「findstr」コマンドの使い方
「findstr」コマンドは指定した文字列をファイル内容から検索するコマンドです。「find」コマンドの強化版であり、指定できるオプションが増え、検索のバリエーションが増しています。「find」コマンドでは事足りない場合に「findstr」コマンドを利用するのがよいでしょう。
使い方は、
1 |
findstr [オプション] "[指定文字列]" [検索対象ファイル] |
となります。これは、「find」コマンドと変わりません。
例えば、「file.txt」ファイルが以下のような内容だとします。
【file.txt】
このファイルに対して、「朝」という文字列を指定して「findstr」コマンドを実行する場合は、
1 |
findstr "朝" file.txt |
とします。
実行結果は以下のようになります。
このように、「朝」という指定した文字列を含む行が表示されています。
指定した文字列の行番号も表示する
「/n」オプションを使うと、行番号を添えた表示が可能です。※「find」コマンドでも同様の指定が可能です。
1 |
findstr /n "朝" file.txt |
指定文字列を含んだ行の出力の左に、[数字]としてその行数が表示されています。
指定した文字列を含まない行を表示する
今度は反対に指定した文字列を含まない行について表示させたい場合です。そのときは「/v」オプションを指定します。※「find」コマンドでも同様の指定が可能です。
1 |
findstr /v "朝" file.txt |
以下、実行例です。
文字列「朝」を含んでない行のみが表示されていることが分かります。
「/v」オプションは他のオプションと併用することも可能で、行番号を表示する「/n」を同時に指定すると、
1 |
find /v /n "朝" file.txt |
もしくは、
1 |
find /vn "朝" file.txt |
とすれば、
のような出力となります。文字列「朝」を含んでない行が表示され、その行番号も表示されています。
大文字と小文字を区別しない
「find」コマンドと同様、「findstr」コマンドで文字列を検索する場合には、大文字と小文字は別の文字列として扱われます。例えば、「file.txt」ファイルに対して「ide」を検索しても、どの行も検索に引っかからず何も表示されません。
大文字と小文字は同一文字列として扱いたい場合は、「/i」オプションを指定します。※「find」コマンドでも同様のオプション指定が可能です。
1 |
findstr /i "ide" file.txt |
以下、実行結果です。
このように、文字列「ide」で検索すると、最後の行の「IDE」が同一文字列と扱われ、検索に引っかかるようになりました。
ワイルドカードを使った文字列の検索
ここからが、「find」コマンドではできなかった機能となります。
まずは、ワイルドカードを使った文字列の検索です。「/r」オプションを指定することで、指定する検索文字列にワイルドカードが使用可能になります。
以下は、ワイルドカード「*」を使って文字列を検索している例ですが、通常の「*」の使い方ではないので、注意が必要です。
1 |
findstr /r "writ*en" file.txt |
以下、実行結果です。
「findstr」コマンドでのワイルドカード「*」は「この記号の左に書かれた文字の繰り返し」を表します。
つまり、上記の例では「writ*en」を検索文字列に指定していますが、「*」は左の「t」の繰り返しの意であり、このコマンドは「written」、「writtten」、「writttten」…を検索していることになります。
任意の文字列を検索したい場合は、「.」を使います。
「.」は任意の一文字として扱われるため、「writ.en」とすれば、「.」の部分はどんな一文字が入ってもよいということになります。
1 |
findstr /r "writ.en" file.txt |
以下、上記のコマンドを実行した結果です。
1文字以上の任意文字列を検索する場合は、「.*」を使用します。
「.」が任意の一文字を表すので、左の文字の繰り返しを表す「*」を併用し、「.*」とすれば1文字以上の任意文字列を表現できるというわけです。
1 |
findstr /r "w.*n" file.txt |
以下、上記のコマンドを実行した結果です。
したがって、この例では、「w」で始まり「n」で終わる文字列を検索していることになります。その間の文字や文字数はどんなものでも構いません。
先頭・末尾が指定文字列と一致する行を検索
「/b」オプションを付けると、指定した検索文字列が行の先頭から始まっている場合のみを対象とすることができます。
以下の例は、「file.txt」ファイルに対して、「朝」から始まっている行を検索して表示するコマンドです。
1 |
findstr /b "朝" file.txt |
以下、実行結果です。
「file.txt」ファイルの内容には、4行目と7行目にも「朝」という文字列が使われています。以下に、「file.txt」ファイルをもう一度示します。
【file.txt】
しかし、「/b」オプションを付けたため、「朝」で始まる行のみが対象となったため検索結果には表示されません。
同じ機能を「/r」オプションを使って書くこともできます。以下のコマンドは上記の「/b」オプションを指定したコマンドと全く同じ働きをします。
1 |
findstr /r "^朝" file.txt |
以下、実行結果です。
ここで、文字列「朝」の前に付いている「^」は「行の始め」という意味です。
「/r」オプションを使用することにより、ワイルドカード以外にも特殊な意味を持つ記号を使えるようになります。そのため、特殊記号をそのまま検索文字として使用するには注意が必要であり、特殊文字の使用には後述する「/l」オプションを使用します。
文字列を指定で終わっている行を検索するには「/e」オプションを用います。以下の例は、「IDE」で終わっている行を検索して表示するコマンドです。
1 |
findstr /e "IDE" file.txt |
以下、実行結果です。
これも、同じ機能を「/r」オプションを使って書くことができます。以下のコマンドは上記のコマンドと全く同じ働きをします。
1 |
findstr /r "IDE$" file.txt |
以下、実行結果です。
複数の検索文字列を指定する
「findstr」コマンドでは、複数の検索文字列を指定することができます。その場合、検索文字列をスペース区切りで指定します。
以下の例は、「朝」もしくは「IDE」の複数の文字列を同時に検索している例です。
1 |
findstr "朝 IDE" file.txt |
以下、実行結果です。
複数の文字列を対象として検索する別の方法として、検索文字列の一覧を書いたファイルから文字列を読み込み検索する方法もあります。まず、以下のような「word.list」ファイル(ファイル名は何でもかまいません)を用意します。
中には検索したい文字列を記入します。そして、実行時に「/g」オプションを用いて、このファイルを指定します。
1 |
findstr /g:word.list file.txt |
以下、実行結果です。
複数のファイルを検索対象とする
「/f」オプションを用いて、複数のファイルを検索対象とすることができます。
まずは、検索対象としたいファイル名を一つのファイルにまとめます。ここでは、以下のような「file.list」ファイルリスト(ファイル名は何でもかまいません)を使用します。
別のフォルダ内にあるファイルも指定可能です。ここでは、「file.txt」と「temp\file2.txt」を指定しており、ファイル内容はそれぞれ、
【file.txt】
【temp\file2.txt】
です。
実行時に「/f」オプションの右側に「:」を挟んでファイルリストを指定します。
1 |
findstr /f:file.list "朝" |
以下、実行結果です。
ファイルリストで指定した二つのファイルから文字列「朝」が検索されていることが分かります。
フォルダ内の複数ファイルを検索対象とする
「/d」オプションを使用して、フォルダ内の複数ファイルを検索対象とすることができます。
例えば、「temp」フォルダの下に「file.txt」ファイルと「file2.txt」ファイルが入っていたとします。ファイルの内容は前回と同じものです。
1 |
findstr /d:temp "朝" *.txt |
とすれば、「temp」フォルダ内の全てのtxtファイルを検索対象とすることができます。コマンドの最後は「*.txt」として、検索するファイルをワイルドカードを使って指定していることに注意して下さい。
以下、実行結果です。
「/d」オプションと「;」を併用すれば、検索対象とするファイルを複数指定することもできます。検索したいフォルダを「;」で区切って複数指定します。
以下の例は、「temp」フォルダと「temp2」フォルダの二つのフォルダを検索対象としています。
1 |
findstr /d:temp;temp2 "朝" *.txt |
以下、実行結果です。
完全に一致する行のみを表示する
ここまでは、一部に指定した文字列が含まれている行を検索してきましたが、ときには行全てが完全に一致した場合だけを見つけたいときもあります。そのときは、「/x」オプションを使用します。
1 |
findstr /x "外は静かだ。" file.txt |
以下、実行結果です。
スペースや「*」、その他特殊文字を検索文字列に使う
スペースや*、その他特殊文字を検索文字列に使うには「/l」オプションを使用します。
例えば、スペースを含んだ「by IDE」という文字列を検索したいとき、
1 |
findstr /l "by IDE" file.txt |
とします。以下、実行結果です。
注意すべきは、「/l」を含まないと「複数の検索文字列を指定する」で述べたように、「by」と「IDE」を別々の文字列としてどちらかを含んだ行を探してしまうということです。スペースを文字列の一部として扱う場合は必ず「/l」が必要です。
その他にも、「/l」を指定することにより、「*」などの特殊文字をそのまま文字として検索することができます。以下、特殊文字の検索コマンド例です。
1 2 3 4 5 6 7 |
findstr /l "*" file.txt findstr /l ">" file.txt findstr /l "<" file.txt findstr /l "|" file.txt findstr /l "&" file.txt findstr /l "%" file.txt findstr /l "^" file.txt |
以下、実行結果です。
「/c:”[文字列]”」オプションを指定することでも、特殊文字を検索文字としてそのまま使うことができるようになります。
1 |
findstr /c:"by IDE" file.txt |
以下、実行結果です。