PowerShell を使用して文字列内の複数のパターンを選択する
PowerShell には、Linux の grep に似たコマンドがあり、文字列パターンを検索してコマンド ラインに出力として表示します。 この記事では、Windows PowerShell を使用して特定の文字列パターンを検索する機能を提供するコマンドレットについて説明します。
Windows の Select-String コマンドの紹介
Linux の grep コマンドは、Windows の Select-String コマンドに相当します。 コマンドレットは、既定で各行の最初の一致を検索し、一致した文字列内のファイル名、行番号、およびテキストを表示します。
Select-String コマンドは、バイト オーダー マーク (BOM) を使用してエンコード形式を決定することにより、Unicode テキストなどの複数のファイル エンコードでも機能する場合があります。 Select-String は、BOM がない場合、UTF8 ファイルであると認識します。
Select-String のパラメータ
AllMatches– 通常、Select-Stringコマンドは各行の最初の一致のみを検索します。 ただし、コマンドレットはこのパラメーターを使用して複数の一致を検索します。 パラメータは、見つかったすべての一致を含む、各行に対して単一のMatchInfoオブジェクトを発行します。CaseSensitive– デフォルトでは、文字列の一致では大文字と小文字が区別されません。 このパラメーターは、コマンドレットが入力パターンと正確に一致するものを検索するように強制します。Context– パラメータが表示する一致の前後の行数を定義できるパラメータ。 このパラメーターを追加すると、発行されたMatchInfoオブジェクトが変更され、指定された行を含む新しい Context プロパティが含まれるようになります。Select-Stringから別のSelect-String呼び出しへの呼び出しでは、単一の結果のMatchInfo行プロパティのみを検索しているため、コンテキストは利用できません。Culture–SimpleMatchパラメーターと共に使用され、指定されたパターンと一致するカルチャを指定します。 このパラメーターには、en-US、es、またはfr-FRの例などのオプションが含まれます。
Ordinal と Invariant の選択は、さらに 2つの有用な可能性です。
Ordinalは非言語バイナリ比較に使用され、Invariantは独立したカルチャ比較に使用されます。 このパラメーターは PowerShell 7 で導入され、以前のバージョンには存在しませんでした。
これは、システムの現在のカルチャを使用することに注意してください。これは、Get-Culture コマンドを使用して決定できます。
-
Encoding– 検索対象ファイルのエンコーディングを指定します。デフォルトはutf8NoBOMです。 PowerShell Core 6.2 以降、Encodingオプションは、登録されたコード ページの数値 ID、または windows-1251 などの文字列名を受け取るようになりました。ASCII: このパラメーターは、ASCII (7 ビット) 文字セットのエンコードを使用します。bigendianunicode: このパラメーターは、ビッグエンディアンのバイト順を使用して UTF-16 形式でエンコードします。OEM: このパラメータは、MS-DOS およびコンソール プログラムのデフォルトのエンコーディングを使用します。Unicode: このパラメーターは、リトルエンディアンのバイト順を使用して UTF-16 形式でエンコードします。utf7: このパラメーターは UTF-7 形式でエンコードします。utf8: このパラメーターは UTF-8 形式でエンコードします。utf8BOM: このパラメーターは、バイト オーダー マーク (BOM) を使用して UTF-8 形式でエンコードします。tf8NoBOM: バイト オーダー マーク (BOM) なしで UTF-8 形式でエンコードします。utf32: UTF-32 形式でエンコードします。
-
Exclude– Path パラメーターを使用して、*.txtなどのパターンを使用して特定のアイテムを除外します。 -
Include–Includeパラメーターは、Excludeパラメーターと同様に、*.csvなどのパターンに一致するエントリのみを含めます。 -
List– このパラメーターは、各入力ファイルから一致するテキストの最初のインスタンスを返します。 このパラメーターは、内容が一致するファイルのリストをすばやく効率的に取得することを目的としています。 -
LiteralPathは、Select-Stringに、*などの値をワイルドカードとして解釈する代わりに、値を入力として使用するように指示します。 パスにエスケープ文字が含まれている場合は、分析しないように単一引用符で囲みます。 -
NoEmphasis– このパラメーターは、一致の強調表示を無効にします。Emphasisパラメーターは、背景テキストの色に基づいた負の色を使用します。 -
NotMatch– このパラメーターは、指定されたパターンに一致しないテキストを探します。 -
Path– 検索するファイルへのパスをこのパラメーターで指定します。 ワイルドカードを使用できますが、ディレクトリのみを指定することはできません。ローカル ディレクトリがデフォルトです。
-
Pattern– このパラメーターは、正規表現に基づいて入力コンテンツまたはファイルを検索するためのパターンを指定します。 -
SimpleMatch– 正規表現の代わりに、このパラメーターは基本的な一致を利用します。 正規表現が使用されていないため、返されたMatchInfoオブジェクトの Matches フィールドは空です。 -
Raw– このパラメーターは、一致する文字列をMatchInfoオブジェクトなしで出力します。 この動作は、PowerShell のよりオブジェクト指向の性質ではなく、grep に最も似ています。 -
Quiet– パターンが見つかった場合、$trueまたは$falseのブール値のみを返します。
Windows PowerShell で Select-String コマンドレットを使用する
例を挙げて、Select-String を活用してテキストの一致をより簡単に見つける方法を見てみましょう。 簡単な例から始めて、いくつかの CSV ファイルで John を探してみましょう。
コード例:
Select-String -Path "PS\*.csv" -Pattern "John"
出力:
PS\user1.csv:3:John,Doe,jdoe@test.com,Male
PS\user2.csv:5:John,Johnson,jjohnson@abccompany.com,Male
各出力の表示プロパティも確認できます。
コード例:
Select-String -Path "Users\*.csv" -Pattern "John" | Select-Object * -First 1
出力:
IgnoreCase : True
LineNumber : 3
Line : John,Doe,jdoe@test.com,Male
Filename : user1.csv
Path : C:\Temp\PS
Pattern : John
Context :
Matches : {2}
複数のパターンを検索する場合は、Pattern パラメーターの下でパラメーター値をコンマで区切ることができます。
コード例:
Select-String -Path "Users\*.csv" -Pattern "John", "Henry", "Jonathan"
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn