PowerShellで文字列検索してみよう
文字列・ファイルのテキスト検索
文字列・ファイルのテキスト検索には、
Select-String を使います。
Select-Stringは、
UNIXのgrepのようなことができます。
Select-Stringを使ってみよう
都道府県の一覧ファイルからSelect-Stringを使って検索してみます。
都道府県一覧のテキストファイル「都道府県.txt」を、Cドライブのtestフォルダにダウンロードしてください
★ダウンロードはこちらから「右クリック」→「名前を付けて保存」
都道府県.txtの内容は下記のとおりです。
——-
北海道
青森県
岩手県
宮城県
秋田県
山形県
福島県
茨城県
栃木県
群馬県
埼玉県
千葉県
東京都
神奈川県
新潟県
富山県
石川県
福井県
山梨県
長野県
岐阜県
静岡県
愛知県
三重県
滋賀県
京都府
大阪府
兵庫県
奈良県
和歌山県
鳥取県
島根県
岡山県
広島県
山口県
徳島県
香川県
愛媛県
高知県
福岡県
佐賀県
長崎県
熊本県
大分県
宮崎県
鹿児島県
沖縄県
——-
例1:都道府県.txt から 「府」を含む行を検索してみます
コマンド:
Select-String “府” c:\test\都道府県.txt
または、
Select-String -Path “c:\test\都道府県.txt” -Pattern “府”
実行結果
都道府県.txt:26:京都府
都道府県.txt:27:大阪府
Powershellの正規表現
「^」:行頭
「$」:行末
「*」:直前文字の0回以上の繰り返し
「+」:直前文字の1回以上の繰り返し
「?」:直前文字の0回か1回の繰り返し
「{n}」:直前の文字のn回の繰り返し
「{n,}」:直前の文字のn回以上の繰り返し
「{n,m}」:直前の文字のn回からm回までの繰り返し
「.」:改行を除く任意の文字
「|」:または(例:x|yはxかyにマッチ)
「[ ]」:[ ]で囲まれた文字のどれかにマッチ(例:[xyz」はxかyかzの文字にマッチ)
「^」:[^]で囲まれた文字以外の文字にマッチ(例:[^xyz」はx、y、z以外の文字にマッチ)
「( )」:サブパターン
「\d」:数字
「\D」:\d以外
「\s」:空白、改行、タブなどの空白文字
「\S」:\s以外
「\w」:英数字および、アンダーバー
「\W」:\w以外の文字
「\b」:単語境界
「\B」:非単語境界
「\」:\nや\t等のエスケープシーケンス
「[a-z]」:aからzまでのアルファベット
「[A-Z]」:AからZまでのアルファベット
「[0-9]」:0から9までの数字
例2:都道府県.txt から 「山」で始まる行を検索してみます
コマンド:
Select-String “^山” c:\test\都道府県.txt
または、
Select-String -Path “c:\test\都道府県.txt” -Pattern “^山”
実行結果
test\都道府県.txt:6:山形県
test\都道府県.txt:19:山梨県
test\都道府県.txt:35:山口県
例3:都道府県.txt から 「島●県」 を含む行を検索してみます(●は任意の文字)
コマンド:
Select-String “島.県” c:\test\都道府県.txt
または、
Select-String -Path “c:\test\都道府県.txt” -Pattern “島.県”
実行結果
test\都道府県.txt:32:島根県
例4:都道府県.txt から 「島」か「鳥」 を含む行を検索してみます(OR検索)
コマンド:
Select-String “島”,”鳥” c:\test\都道府県.txt
または、
Select-String -Path “c:\test\都道府県.txt” -Pattern “島”,”鳥”
実行結果
test\都道府県.txt:7:福島県
test\都道府県.txt:31:鳥取県
test\都道府県.txt:32:島根県
test\都道府県.txt:34:広島県
test\都道府県.txt:36:徳島県
test\都道府県.txt:46:鹿児島県
例5:都道府県.txt から 「京」と「都」 を含む行を検索してみます(AND検索)
コマンド:
Select-String “京” c:\test\都道府県.txt | Select-String “都”
または、
Select-String -Path “c:\test\都道府県.txt” -Pattern “京” | Select-String “都”
実行結果
test\都道府県.txt:13:東京都
test\都道府県.txt:26:京都府
例6:都道府県.txt から 「県」を含まない行を検索してみます(NOT検索)
コマンド:
Select-String -Path “c:\test\都道府県.txt” -NotMatch -Pattern “県”
または、
Select-String “県” c:\test\都道府県.txt -NotMatch
実行結果
test\都道府県.txt:1:北海道
test\都道府県.txt:13:東京都
test\都道府県.txt:26:京都府
test\都道府県.txt:27:大阪府
例7:都道府県.txt から 「道」と「県」を含まない行を検索してみます(NOT検索)
コマンド:
Select-String -Path “c:\test\都道府県.txt” -NotMatch -Pattern “道”,”県”
または、
Select-String “道”,”県” c:\test\都道府県.txt -NotMatch
実行結果
test\都道府県.txt:13:東京都
test\都道府県.txt:26:京都府
test\都道府県.txt:27:大阪府
例8:都道府県.txt から 「道」と「県」を含まず、「都」を含む行を検索してみます
コマンド:
Select-String -Path “c:\test\都道府県.txt” -NotMatch “道”,”県” | Select-String “都”
または、
Select-String “都” c:\test\都道府県.txt | Select-String “道”,”県” -NotMatch
実行結果
test\都道府県.txt:13:東京都
test\都道府県.txt:26:京都府
少し実践的に
たとえばアクセスログファイル「C:\access.log」から 「GET index.html」 を含む行を検索したい場合は、
コマンド:
Select-String “GET index.html” C:\access.log
さらに、特定のIPアドレスを含む行を検索結果から除きたい場合は、
コマンド:
Select-String “GET index.html” C:\access.log | Select-String “10.90.xx.xx”,”192.168.xx.xx” -notmatch
などとします。