PowerShellでのmatchコマンドの使用方法について解説
1. 配列のフィルタリング
この記事では、PowerShellのmatch演算子を正規表現とともに使用して、配列から目的のコンテンツをフィルタリングする方法について説明します。
まずは、次の例から見てみましょう。
PS C:\UsersHong\> (ipconfig) -match 'IPv4'
IPv4 address . . . . . . . . . . . . : 192.168.1.102
IPv4 address . . . . . . . . . . . . : 192.168.193.1
IPv4 address . . . . . . . . . . . . : 192.168.93.1
ipconfigは、現在のコンピュータのTCP/IP設定情報を表示することが分かっており、そのうちの1つがIPアドレスです。NICが複数ある場合や、サイト内に複数のIPアドレスが設定されている場合、それらを非常にわかりやすく表示することができます。このipconfigを例にして、マッチオペレーターフィルタリング配列の機能を説明しましょう。
ipconfigの実行結果は、おおよそこのようになるはずです。
PS C:\UsersHong\> (ipconfig)
Windows IP Configuration
Wireless LAN Adapter Local Connection* 13:
Media Status . . . . . . . . . . . . : Media is disconnected
Connecting to a specific DNS suffix . . . . . . . :
Wireless LAN adapter Wi-Fi:
Connecting to a specific DNS suffix . . . . . . . :
Local link IPv6 address. . . . . . . . : fe80::a438:a0ec:e477:94c6%12
IPv4 address . . . . . . . . . . . . : 192.168.1.102
Subnet Mask . . . . . . . . . . . . : 255.255.255.0
Default gateway . . . . . . . . . . . . . : 192.168.1.1
...... (other NICs are omitted here)
ローカルに設定されたIPアドレスを見たいのであれば、IPv4で始まる行だけを見ればいいのです。そして、マッチするキーワードとして "IPv4"を使用すればよいのです。ということで、PowerShellコマンドはこう書くことになる。
(ipconfig) -match 'IPv4'。
なぜここでipconfigは括弧で囲まれているのでしょうか?なぜなら、ipconfig 自身がいくつかの引数を持っていることを知っていて、システムが -match も ipconfig に割り当てた引数だと勘違いしないように、ipconfig を括弧で囲んでいるのです。括弧は優先され、ipconfig が独立した全体であることをシステムに伝えているのです。
この例では、ipconfigの実行結果は文字列の配列になります。配列の各要素は出力の各行であり、配列の要素の数だけ出力があることになります。matchパラメータは、配列の要素からマッチを見つけ、マッチした要素を出力することによって、配列に対して操作を行います。
2. マッチによるコンテンツの抽出
正規表現のもう一つの重要な用途は、文字列が正規表現の規則にマッチするかどうかを判断する以外に、文字列から指定された内容を抽出することである。どういうことだろうか。例えば、ある文字列の中に連続した3つの数字があり、その3つの数字を簡単に抽出したい場合、正規表現を使用することができます。
PS C:\Users\Hong> $str="abc123abc"
PS C:\Users\Hong> $pattern="(\d{3})"
PS C:\Users\Hong> $str -match $pattern
True
PS C:\Users\Hong> $matches
Name Value
---- -----
1 123
0 123
上記の例では、連続する3桁の数字123を含む文字列 $str="abc123abc" を指定しています。また、正規表現である$pattern変数を定義しています。matchを直接実行すると、出力はtrueとなり、$str文字列の中に3桁の連続した数字があることを示す。
もう一度$matchesを実行すると、出力は123となり、これがマッチした値です。変数$matchesはカスタムではなく、システム変数です。このシステム変数は、match演算子を実行したときに自動的に値を取得します。
なぜ$matchesが2つの値を持つのかを説明するために、上の例を参考にして、修正してみましょう。その違いを見てみよう。
PS C:\Users\Hong> $str="abc123abc"
PS C:\Users\Hong> $pattern="abc(\d{3})"
PS C:\Users\Hong> $str -match $pattern
True
PS C:\Users\Hong> $matches
Name Value
---- -----
1 123
0 abc123
変数$patternの値の前にabcを付けて修正し、$matches[0]の値はabc123となり、$matches[0]が正規表現にマッチすることを意味するようになりました。また、$matches[1]以降の内容は、片方の括弧の中にある正規表現の内容に対応する。この例では、括弧は1つだけで、それも$matches[1]だけです。もし正規表現が複数の括弧を持っていたら、複数の$matches要素の値があることを想像してください。
関連
-
制限された言語パターンを迂回するPowerShellコードインジェクションの脆弱性を防ぐ方法
-
powershellでSQL SERVERの全バージョンを弄る方法
-
PowerShellでは配列のフィルタリングにmatch演算子を使用する
-
PowershellによるWindowsログのクエリ方法
-
PowerShellで光学ドライブをオープン/クローズする
-
PowerShellのヒントとコツ
-
PowerShellのエスケープ文字とは何ですか?
-
文字列中の大文字を検索するPowerShellの実装
-
Powershellは2つのフォルダの差分を比較する
-
ファイルリソースを含むPowershellスクリプトの例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PowerShellスクリプトでパスワードを保存する方法
-
Powershellは、ユーザーのプライマリSMTPアドレスを検索します。
-
PowerShell 3.0 Hyper-V 3.0 の管理
-
PowerShellでの追加を解説
-
PowerShellの基本的な使い方のチュートリアル
-
PowerShell DSC コンポーネント xExchange をリリースしました。
-
テキストファイルの暗号化・復号化に対するPowershellのアプローチ例
-
PowerShell ISEコードにおける大文字・小文字変換のコツ
-
Powershellで "確認プロンプト "をブロックする方法
-
Powershellは、ローカルレジストリからすべてのソフトウェア関連付けの拡張子を読み取ります。