【完全保存版】PowerShellでのfindstrの使い方まとめ

Windows

「たくさんのログからエラーだけを見つけたい」
「ファイルに特定の言葉が入っているか調べたい」

そんなときに便利なのが、findstr(ファインド・ストリング)というコマンドです。

findstrはWindowsに最初から入っている文字列検索ツールで、PowerShellからもそのまま使えます。

この記事では、findstrの基本的な使い方から、実際の仕事で役立つ応用テクニックまで詳しく説明します。

スポンサーリンク

基本的な使い方

一番シンプルな検索

説明 ファイルの中から特定の文字を探す基本的な方法です。

基本の書き方

findstr "探したい文字" ファイル名

例1:ログファイルからエラーを探す

findstr "error" log.txt

実行結果の例

2024-01-15 10:30:22 ERROR: Database connection failed
2024-01-15 11:45:33 ERROR: File not found

複数のファイルをまとめて検索

説明 たくさんのファイルを一度に検索したいときの方法です。

例1:すべてのログファイルを対象にする

findstr "timeout" *.log

例2:すべてのテキストファイルを対象にする

findstr "設定" *.txt

複数の言葉を同時に探す

説明 「AまたはB」という条件で検索する方法です。

findstr "error fail" system.log

この例では、「error」か「fail」のどちらかが含まれる行を表示します。

便利なオプション

findstrには、検索をより便利にするオプションがあります。

よく使うオプション一覧

オプション何ができるか使う場面
/I大文字小文字を区別しない「Error」も「error」も見つけたい
/N行番号を表示する何行目に書かれているか知りたい
/Sサブフォルダも検索するフォルダの中のフォルダも調べたい
/R正規表現を使う複雑なパターンで検索したい
/C:"文字列"複数の単語を一つの文として検索「connection error」という文を探したい
/V含まない行を表示する特定の文字が入っていない行を見たい

オプションの使用例

例1:大文字小文字を区別せず、行番号付きで表示

findstr /I /N "failed" error.log

実行結果の例

15:2024-01-15 10:30:22 Connection failed
28:2024-01-15 11:45:33 Login Failed

例2:複数の単語を一つの文として検索

findstr /C:"connection timed out" network.log

例3:サブフォルダも含めて検索

findstr /S "fatal" *.log

正規表現を使った高度な検索

/Rオプションを使うと、パターンを使った検索ができます。

IPアドレスを探す

説明 「数字.数字.数字.数字」の形式を探します。

findstr /R "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" access.log

実行結果の例

192.168.1.100 accessed the server
10.0.0.1 connection established

特定のファイル拡張子を探す

説明 「.conf」や「.ini」で終わる行を探します。

findstr /R "\.conf$ \.ini$" setting.log

正規表現の注意点

重要 findstrの正規表現は簡単なものしか使えません。

  • +(1回以上の繰り返し)は使えない
  • ?(0回または1回)は使えない
  • より高度な検索にはSelect-Stringがおすすめ

PowerShellとの組み合わせ

findstrは他のPowerShellコマンドと組み合わせて使うと、さらに便利になります。

コマンドの出力を直接検索

説明 コマンドの結果を直接検索できます。

例1:ネットワーク情報からIPv4だけを表示

ipconfig | findstr "IPv4"

実行結果の例

IPv4 アドレス . . . . . . . . . . . .: 192.168.1.100

例2:プロセス一覧から特定のソフトを探す

tasklist | findstr "chrome"

ファイルの内容を検索して保存

説明 検索結果を新しいファイルに保存する方法です。

$errors = Get-Content log.txt | findstr "error"
$errors | Out-File error_only.txt

この例では、ログファイルからエラーだけを抜き出して、新しいファイルに保存しています。

複数条件での検索

Get-Content application.log | findstr /I "error fail warn"

この例では、「error」「fail」「warn」のいずれかが含まれる行を、大文字小文字を区別せずに検索しています。

実際の仕事で使える例

ログファイルの調査

場面 Webサーバーのログから問題を調べたいとき

# エラーだけを抜き出す
findstr /I "error" access.log

# 特定の時間帯のアクセスを調べる
findstr "2024-01-15 10:" access.log

# 404エラーを調べる
findstr "404" access.log

設定ファイルの確認

場面 設定ファイルから特定の設定を探したいとき

# ポート番号の設定を探す
findstr /I "port" config.txt

# データベース関連の設定を探す
findstr /I "database db" *.conf

システム情報の収集

場面 システムの状態を調べたいとき

# メモリ使用量の高いプロセスを探す
tasklist | findstr /R "[0-9],[0-9][0-9][0-9] K"

# 特定のサービスの状態を確認
sc query | findstr "SERVICE_NAME\|STATE"

よくある間違いと対処法

日本語の検索で文字化けする

問題 日本語を検索すると、結果が正しく表示されない

対処法 PowerShellのエンコーディングを確認する

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
findstr "日本語" file.txt

複数語検索で期待した結果にならない

間違った例

findstr "connection error" log.txt  # これは「connection」OR「error」

正しい例

findstr /C:"connection error" log.txt  # これは「connection error」という文

特殊文字でエラーになる

問題 「(」「)」「[」「]」などを検索するとエラーになる

対処法 特殊文字の前に「\」を付ける

findstr "エラー\(重要\)" log.txt

findstrとSelect-Stringの違い

項目findstrSelect-String
速度速いやや遅い
機能基本的高機能
正規表現簡易版完全版
PowerShell連携普通優秀
おすすめ用途簡単な検索複雑な検索

まとめ

findstrの基本パターン

やりたいことコマンド例
基本検索findstr "word" file.txt
複数語検索findstr "word1 word2" file.txt
サブフォルダ含むfindstr /S "error" *.log
大文字小文字無視findstr /I "Error" file.txt
行番号表示findstr /N "error" file.txt
正規表現findstr /R "パターン" file.log
パイプ連携`Get-Content file.txt

使い分けのコツ

findstrがおすすめの場面

  • 簡単で速い検索がしたい
  • 大量のファイルを検索したい
  • ログ調査で基本的な文字列を探したい

Select-Stringがおすすめの場面

  • 複雑な正規表現を使いたい
  • PowerShellオブジェクトとして結果を扱いたい
  • より細かい制御をしたい

コメント

タイトルとURLをコピーしました