PowerShell を使用して文字列内の複数のパターンを選択する

Marion Paul Kenneth Mendoza 2023年6月21日
  1. Windows の Select-String コマンドの紹介
  2. Windows PowerShell で Select-String コマンドレットを使用する
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 行プロパティのみを検索しているため、コンテキストは利用できません。
  • CultureSimpleMatch パラメーターと共に使用され、指定されたパターンと一致するカルチャを指定します。 このパラメーターには、en-USes、または fr-FR の例などのオプションが含まれます。

OrdinalInvariant の選択は、さらに 2つの有用な可能性です。

  • Ordinal は非言語バイナリ比較に使用され、Invariant は独立したカルチャ比較に使用されます。 このパラメーターは PowerShell 7 で導入され、以前のバージョンには存在しませんでした。

これは、システムの現在のカルチャを使用することに注意してください。これは、Get-Culture コマンドを使用して決定できます。

  • Encoding – 検索対象ファイルのエンコーディングを指定します。デフォルトは utf8NoBOM です。 PowerShell Core 6.2 以降、Encoding オプションは、登録されたコード ページの数値 ID、または windows-1251 などの文字列名を受け取るようになりました。

    1. ASCII: このパラメーターは、ASCII (7 ビット) 文字セットのエンコードを使用します。
    2. bigendianunicode: このパラメーターは、ビッグエンディアンのバイト順を使用して UTF-16 形式でエンコードします。
    3. OEM: このパラメータは、MS-DOS およびコンソール プログラムのデフォルトのエンコーディングを使用します。
    4. Unicode: このパラメーターは、リトルエンディアンのバイト順を使用して UTF-16 形式でエンコードします。
    5. utf7: このパラメーターは UTF-7 形式でエンコードします。
    6. utf8: このパラメーターは UTF-8 形式でエンコードします。
    7. utf8BOM: このパラメーターは、バイト オーダー マーク (BOM) を使用して UTF-8 形式でエンコードします。
    8. tf8NoBOM: バイト オーダー マーク (BOM) なしで UTF-8 形式でエンコードします。
    9. utf32: UTF-32 形式でエンコードします。
  • Exclude – Path パラメーターを使用して、*.txt などのパターンを使用して特定のアイテムを除外します。

  • IncludeInclude パラメーターは、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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

関連記事 - PowerShell String