【Powershell】Select-Stringを利用してテキスト内の文字列を検索してみた

Powershell Powershell

Select-String」を利用することで、あるコマンドの後に | (パイプ) で値を渡し、特定の文字を含む結果を取得することができます。

その他にも「Select-String」を利用することで、テキスト内の文字列を検索することも可能です。

今回はその「テキスト内の文字列を検索する」挙動を試してみました。

広告

テキスト内の文字列を検索する

「Select-String」を利用してテキスト内の文字列を検索する場合、以下のように記載します。
 ※Select-Stringは小文字でも可能です(select-string でもOK)

Select-String {検索文字列} {ファイルのパス}

今回は以下の内容を記載したテキストファイルを用意して挙動を確認していきます。

a
aaa
b
ccc
dd
eeeeeee
fghijk
lmnopqe

例1 文字を指定する

シンプルに文字を検索してみます。

Select-String "e" C:\Users\hogeuser\Desktop\test.txt

結果は以下の通りです。

PS C:\> Select-String "e" C:\Users\hogeuser\Desktop\test.txt

Users\hogeuser\Desktop\test.txt:6:eeeeeee
Users\hogeuser\Desktop\test.txt:8:lmnopqe

PS C:\>

出力の一番右側に検索にヒットした文字列が表示され、その手前には行番号も表示されます。

例2 正規表現を利用できるか確認してみる

次に検索に正規表現を利用できるかを確認してみます。

Select-String "^a$" C:\Users\hogeuser\Desktop\test.txt

結果は以下の通りです。

PS C:\> Select-String "^a$" C:\Users\hogeuser\Desktop\test.txt

Users\hogeuser\Desktop\test.txt:1:a

PS C:\>

今回利用した正規表現は、文頭を定義する [^] と、文末を定義する [$]を利用して、aから始まりaで終わる1文字を検索条件として記載しています。

出力結果としてもテキストファイル内1行目の「a」だけが出力されているので、
「Select-String」の検索条件として正規表現を利用できることが確認できました。

ちなみに単にaだけを検索した場合の結果は以下です。

PS C:\> Select-String "a" C:\Users\hogeuser\Desktop\test.txt

Users\hogeuser\Desktop\test.txt:1:a
Users\hogeuser\Desktop\test.txt:2:aaa

PS C:\>

テキストファイル内2行目の「aaa」も該当するため結果として表示されることが確認できます。

例3 csvファイルを読み込んでみる

最後に拡張子が .txt 以外のファイルでも検索できるのかを試してみます。
csvファイルは以下の内容とします。

a,a,a
aaa,aaa,aaa
b,b,bbbbbbbbb

検索を実行してみます。

PS C:\> Select-String "bbbb" C:\Users\hogeuser\Desktop\test.csv

Users\hogeuser\Desktop\test.csv:3:b,b,bbbbbbbbb

PS C:\>
PS C:\> Select-String "b" C:\Users\hogeuser\Desktop\test.csv

Users\hogeuser\Desktop\test.csv:3:b,b,bbbbbbbbb

PS C:\>

2パターンで実行してみましたが、csvファイルでも「Select-String」を利用して文字列検索をすることができました。

まとめ

Select-String」について今回試したことをまとめると以下の通りです。

  • テキスト内の文字列を検索することが可能
  • 検索条件として正規表現が利用可能
  • csvファイルでも文字列検索が可能

[参考] コマンド実行後に特定の文字を含む結果を取得させる

ちなみにコマンドの実行後に | (パイプ) で値を渡し、特定の文字を含む結果を取得する場合には以下のように利用します。

Get-Command | Select-String "set-win"

上記のコマンドでは、
「Get-command」 の実行結果の値を|(パイプ)で渡し、「Select-String」で “set-win” を含むコマンドを一覧を出力します。

実行結果としては以下のようになり、“set-win” を含む結果が表示されます。

PS C:\> Get-Command | Select-String "set-win"

Set-WinAcceptLanguageFromLanguageListOptOut
Set-WinCultureFromLanguageListOptOut
Set-WinDefaultInputMethodOverride
Set-WindowsEdition
Set-WindowsProductKey
Set-WindowsReservedStorageState
Set-WindowsSearchSetting
Set-WinHomeLocation
Set-WinLanguageBarOption
Set-WinSystemLocale
Set-WinUILanguageOverride
Set-WinUserLanguageList


PS C:\>

[参考] select-stringは sls として省略して利用可能

select-stringは sls としてエイリアスが登録されているので以下のようにも利用できます。

Get-Command | sls "set-win"

こちらの方がコマンド入力の文字数が少なくて格段に楽ですね^^

コメント

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