※記事内に商品プロモーションを含むことがあります。
はじめに
PowerShellを使って、サブフォルダを含む複数のテキスト形式のファイルから文字列を検索するには以下を実行します。
|
|
例: 123
という文字列を検索する場合
|
|
実行すると、ヒットしたファイル名、何行目か、およびその行の文字列が一覧で表示されます。
test1.txt:1:No. 123
sub_folder\test2.txt:2:123456
動作を確認した環境は以下の通りです。
- Windows 10 Home 21H1
- PowerShell 5.1.19041.1320
以降では上記のコマンドの詳細や、より細かな検索条件を指定する場合のオプションを解説します。
コマンドの詳細
前出のコマンドにおいて、ls
はGet-ChildItem
, sls
はSelect-String
の省略形(エイリアス)です。すなわち、以下のように実行しても同じ結果が得られます。
|
|
Get-ChildItem
はカレントディレクトリにあるファイルを全て返すコマンドです。オプションに-R
を付けることによって、サブフォルダにあるファイルも取得できます。
取得したファイルをパイプライン|
を使って、Select-String
に渡します。
Select-String
はファイル内のテキストを検索するコマンドです。
正規表現による検索
sls
で検索する文字列には正規表現を使用できます(後述のワイルドカードは使用できません)。簡単な正規表現を以下に示します。
記号 | 説明 |
---|---|
. | 任意の1文字 |
* | 直前の文字の0回以上の繰り返し |
+ | 直前の文字の1回以上の繰り返し |
? | 直前の文字が0回か1回 |
[a-z] | 範囲内の1文字 |
[abc] | いずれか1文字 |
正規表現の例をいくつか示します。
記述例 | 一致する | 一致しない |
---|---|---|
l.w |
low, law | lw |
no*n |
nn, non, noon | norman |
no+n |
non, noon | nn, norman |
no?n |
nn, non | noon, norman |
[a-d]ook |
book, cook | look |
正規表現の詳細は以下のページを参考にしてください。
大文字と小文字の区別
デフォルトではアルファベットの大文字と小文字は区別されません。区別するには、sls
に-CaseSensitive
オプションを付けます。
以下の例では文字列FISH
はヒットしますが、fish
やFish
はヒットしません。
|
|
日本語のエンコーディング
日本語を検索するときには、テキストファイルのエンコーディングに注意する必要があります。
Shift-JISでエンコーディングされているファイルを検索するときには、sls
に-Encoding default
オプションを付けます。付けなかった場合は、UTF-8でエンコーディングされたファイルが検索されます。
|
|
ファイル名で絞り込み
検索にヒットするファイルが多過ぎる場合は、ls
の-Filter
オプションを使ってファイル名で絞り込みます。-Filter
の後ろにファイル名を与えます。
例1:test.txt
というファイルのみ検索したい場合
|
|
また、-Filter
ではワイルドカードを使って柔軟にファイル名を指定できます(前述の正規表現は不可)。ワイルドカードの例を以下に示します。
記号 | 説明 | 記述例 | 一致する | 一致しない |
---|---|---|---|---|
* |
0文字以上の任意の文字 | *low |
low, flow, shallow | abc |
? |
任意の1文字 | a?c |
abc, arc | ac, abbc |
[ ] |
範囲内の1文字 | a[a-c]c |
abc, acc | arc, ac |
[ ] |
いずれか1文字 | a[br]c |
abc, arc | aac, ac |
例2:拡張子が.txt
というファイルのみ検索したい場合
|
|