PowerShell を使用してファイルに特定の文字列が含まれているかどうかを確認する
-
PowerShell で
Select-String
を使用して、ファイルに特定の文字列が含まれているかどうかを確認する -
PowerShell で
Get-Content
を使用して、ファイルに特定の文字列が含まれているかどうかを確認する -
PowerShell で
Get-ChildItem
とSearch-String
を使用して、ファイルに特定の文字列が含まれているかどうかを確認する
この記事では、Windows PowerShell でテキスト ファイル内の文字列を検索するために使用できるさまざまな方法について説明します。
これを実現するために、Unix および Linux 環境で grep
を使用できます。 PowerShell でこれに相当するのは、正規表現を使用してファイル内の文字列を検索する Select-String
というコマンドレットです。
PowerShell で Select-String
を使用して、ファイルに特定の文字列が含まれているかどうかを確認する
マシンに Demo.txt
ファイルがあるとします。 PowerShell を使用してファイル内の文字列 Demonstration
を見つけるにはどうすればよいでしょうか?
使用できる PowerShell スクリプトは次のとおりです。
Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern 'Demonstration'
上記のシェル スクリプトでは、Select-String
はパターン Demonstration
を使用して Demo.txt
ファイル内の文字列を検索します。 Path
パラメータでファイルへのフル パスを指定したことに注意してください。
ファイルに指定されたパターンが含まれている場合、コンソールはファイル名、行番号、および文字列を含む行を出力します。 出力は次のとおりです。
C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
上記の出力から、Demo.txt
ファイルのフル パス、文字列を含む行、行 1
、および文字列を含む行、つまり This is purely for demo
が得られます。
ファイルに文字列が含まれているか含まれていないかだけを知りたい場合はどうすればよいでしょうか。
このような場合、以下に示すようなスクリプトを使用できます。
$Knw = Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern "Demonstration"
if ($Knw -ne $null)
{
echo Contains String
}
else
{
echo Does not Contain String
}
上記のシェル スクリプトでは、$Knw
という文字列を定義し、それが $null
と等しくないかどうかをチェックしています。 これは、ファイルに Demonstration
というパターンが含まれているためです。
Contains
文字列を出力として取得する必要があります。
PowerShell で Get-Content
を使用して、ファイルに特定の文字列が含まれているかどうかを確認する
Get-Content は、指定されたパスの内容をファイルにフェッチし、ファイルの内容を読み取って文字列オブジェクトを返すコマンドレットです。
Demo.txt
ファイルで Get-Content
を使用するには、以下に示すスクリプトを使用します。
Get-Content -Path C:\Users\pc\Demo\Demo.txt | Select-String -Pattern "Demonstration"
上記の PowerShell スクリプトでは、Get-Content
は、Path
パラメーターで指定された Demo.txt
ファイルの内容をフェッチして読み取ります。 次に、ファイルの内容を Select-String
コマンドに転送します。このコマンドは、Pattern
パラメーターを使用して Demonstration
文字列を見つけます。
これにより、文字列を含む行が出力されます。
This purely for demonstration
文字列の存在のみを確認したい場合は、以下に示すスクリプトを使用できます。
If (Get-Content C:\Users\pc\Demo\Demo.txt | %{$_ -match "Demonstration"})
{
echo Contains String
}
else
{
echo Does not Contains String
}
ファイルには指定された文字列が含まれているため、出力として Contains String
を取得する必要があります。
PowerShell で Get-ChildItem
と Search-String
を使用して、ファイルに特定の文字列が含まれているかどうかを確認する
50 を超えるテキスト ファイルのプールがあり、すべてのファイルで文字列を検索したい場合、どのようにすればよいでしょうか。
このようなシナリオでは、Get-ChildItem
と Search-String
コマンドレットを使用します。 Get-ChildItem
コマンドレットは、検索条件に基づいて 1つ以上のファイルを検索します。
例を見てみましょう。
Demo
フォルダーに 50 個以上のテキスト ファイルがあると仮定すると、これらのファイルで文字列 Demonstration
を検索するにはどうすればよいでしょうか。
使用するスクリプトは次のとおりです。
Get-ChildItem -Path C:\Users\pc\Demo\ -Recurse | Select-String -Pattern 'Demonstration'
上記のスクリプトは、指定された Path
パラメータで文字列 Demonstration
を再帰的に検索します。 コンソールは、文字列を含むファイル名、行番号、および文字列を含む行を出力します。
出力は次のとおりです。
C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem
そこにあります。
簡単に言うと、Windows PowerShell を使用して特定のファイル文字列を検索する場合は、Get-ChildItem
、Get-Content
、および Search-String
コマンドが便利です。 Select-String
は、Unix の grep
と Windows の findstr
に相当します。
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn