| ホーム |
スポンサーサイト
ファイルの内容を検索する/findstr(その1)
独断と偏見で選ぶ「これだけ知っておけばOK」コマンド8個目はfindstrコマンドです。
findコマンドの高機能版。
findコマンドとの違いは、正規表現を使って多少高度な検索を行えること、サブディレクトリのファイルも検索対象に指定できること。あとfindとfindstrで似たようなことをやっても出力の書式が若干違います。
注意点としては、日本語文字列を検索すると「抽出されるはずなのに抽出されない」事象が時々あること。バグなのかな?
★用途
・ファイルの内容検索
★構文
findstr "検索したい文字列" 検索したいファイル名
data1.txtから「京都」を含む行を検索。
ファイル名を明示すれば出力結果にファイル名は表示されません。
c:¥Users¥sample>findstr "京都" data1.txt
昨日、京都に行ってきました。
東京都千代田区
京都府の人口は263万人、京都市の人口は147万人です。
/nをつけると検索結果に行番号を表示。
c:¥Users¥sample>findstr /n "京都" data1.txt
14:昨日、京都に行ってきました。
26:東京都千代田区
40:京都府の人口は263万人、京都市の人口は147万人です。
/sをつけるとサブディレクトリも含むファイルから「京都」を含む行を検索。
c:¥Users¥sample>findstr /s "京都" data1.txt
data1.txt:昨日、京都に行ってきました。
data1.txt:東京都千代田区
data1.txt:京都府の人口は263万人、京都市の人口は147万人です。
work¥data1.txt:京都の天気は晴れ。
複数ファイルから「京都」を含む行を検索。
ファイル名は検索結果と同じ行に表示されます。
c:¥Users¥sample>findstr "京都" data*.txt
data1.txt:昨日、京都に行ってきました。
data1.txt:東京都千代田区
data1.txt:京都府の人口は263万人、京都市の人口は147万人です。
data3.txt:京都グルメ情報
検索対象ファイルを複数指定したい時は、ファイル名一覧を指定する方法でも可能です。
適当な名前のファイル(ここではlist.txt)に検索対象にしたいファイル名を1行1ファイルで記述しておきます。
list.txt
data4.txt
日記.txt
地名.txt
「/f:検索対象ファイル名の一覧」を指定してfindstrコマンドを実行します。
ワイルドカード「*」ではファイル名を指定するのが難しい場合に便利。
c:¥Users¥sample>findstr /f:list.txt "京都"
日記.txt:昨日、京都に行ってきました。
日記.txt:京都府の人口は263万人、京都市の人口は147万人です。
地名.txt:東京都千代田区
findと同様、パイプを使って他のコマンドの出力結果から必要な部分を抽出するのにも使えます。
dirコマンドの出力結果から、タイムスタンプが2011年のもののみを抽出。
c:¥Users¥sample>dir | findstr "2011"
2011/04/24 19:37 20 list.txt
2011/04/24 19:50 30 地名.txt
2011/04/24 19:49 106 日記.txt
また長くなりました。検索文字列の指定方法バリエーションとか正規表現とかは次回以降で書いてみたいなと思います。
findコマンドの高機能版。
findコマンドとの違いは、正規表現を使って多少高度な検索を行えること、サブディレクトリのファイルも検索対象に指定できること。あとfindとfindstrで似たようなことをやっても出力の書式が若干違います。
注意点としては、日本語文字列を検索すると「抽出されるはずなのに抽出されない」事象が時々あること。バグなのかな?
★用途
・ファイルの内容検索
★構文
findstr "検索したい文字列" 検索したいファイル名
data1.txtから「京都」を含む行を検索。
ファイル名を明示すれば出力結果にファイル名は表示されません。
c:¥Users¥sample>findstr "京都" data1.txt
昨日、京都に行ってきました。
東京都千代田区
京都府の人口は263万人、京都市の人口は147万人です。
/nをつけると検索結果に行番号を表示。
c:¥Users¥sample>findstr /n "京都" data1.txt
14:昨日、京都に行ってきました。
26:東京都千代田区
40:京都府の人口は263万人、京都市の人口は147万人です。
/sをつけるとサブディレクトリも含むファイルから「京都」を含む行を検索。
c:¥Users¥sample>findstr /s "京都" data1.txt
data1.txt:昨日、京都に行ってきました。
data1.txt:東京都千代田区
data1.txt:京都府の人口は263万人、京都市の人口は147万人です。
work¥data1.txt:京都の天気は晴れ。
複数ファイルから「京都」を含む行を検索。
ファイル名は検索結果と同じ行に表示されます。
c:¥Users¥sample>findstr "京都" data*.txt
data1.txt:昨日、京都に行ってきました。
data1.txt:東京都千代田区
data1.txt:京都府の人口は263万人、京都市の人口は147万人です。
data3.txt:京都グルメ情報
検索対象ファイルを複数指定したい時は、ファイル名一覧を指定する方法でも可能です。
適当な名前のファイル(ここではlist.txt)に検索対象にしたいファイル名を1行1ファイルで記述しておきます。
list.txt
data4.txt
日記.txt
地名.txt
「/f:検索対象ファイル名の一覧」を指定してfindstrコマンドを実行します。
ワイルドカード「*」ではファイル名を指定するのが難しい場合に便利。
c:¥Users¥sample>findstr /f:list.txt "京都"
日記.txt:昨日、京都に行ってきました。
日記.txt:京都府の人口は263万人、京都市の人口は147万人です。
地名.txt:東京都千代田区
findと同様、パイプを使って他のコマンドの出力結果から必要な部分を抽出するのにも使えます。
dirコマンドの出力結果から、タイムスタンプが2011年のもののみを抽出。
c:¥Users¥sample>dir | findstr "2011"
2011/04/24 19:37 20 list.txt
2011/04/24 19:50 30 地名.txt
2011/04/24 19:49 106 日記.txt
また長くなりました。検索文字列の指定方法バリエーションとか正規表現とかは次回以降で書いてみたいなと思います。
| ホーム |