PowerShellで文字列検索してみよう

公開日:  最終更新日:2014/06/09

文字列・ファイルのテキスト検索

文字列・ファイルのテキスト検索には、
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:大阪府

Windows PowerShell_20140609-213055

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:山口県

Windows PowerShell_20140609-195701

例3:都道府県.txt から 「島●県」 を含む行を検索してみます(●は任意の文字)

コマンド:

 Select-String “島.県” c:\test\都道府県.txt
または、
 Select-String -Path “c:\test\都道府県.txt” -Pattern “島.県”

実行結果

test\都道府県.txt:32:島根県

Windows PowerShell_20140609-195859

例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:鹿児島県

Windows PowerShell_20140609-200004

例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:京都府

Windows PowerShell_20140609-212535

例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:大阪府

Windows PowerShell_20140609-212624

例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:大阪府

Windows PowerShell_20140609-212659

例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:京都府

Windows PowerShell_20140609-212745

少し実践的に

たとえばアクセスログファイル「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

などとします。

NEXT

シェアありがとうございます

  • このエントリーをはてなブックマークに追加
  • Pocket
PAGE TOP ↑