PowerShell中match命令使用詳解
1.篩選數(shù)組
本文介紹PowerShell中使用match操作符,配合正則表達(dá)式從數(shù)組中篩選出想要的內(nèi)容。
先看下面這個(gè)例子:
PS C:\Users\Hong> (ipconfig) -match 'IPv4' IPv4 地址 . . . . . . . . . . . . : 192.168.1.102 IPv4 地址 . . . . . . . . . . . . : 192.168.193.1 IPv4 地址 . . . . . . . . . . . . : 192.168.93.1
我們知道ipconfig是顯示當(dāng)前計(jì)算機(jī)的TCP/IP配置信息的,其中有一項(xiàng)是IP地址。如果有多個(gè)網(wǎng)卡,或者一個(gè)網(wǎng)站上配置有多個(gè)IP地址,都可以很清楚的顯示出來。我們?yōu)榱苏故緈atch操作符篩選數(shù)組的功能,我們就拿這個(gè)ipconfig來做示例。
ipconfig執(zhí)行后的結(jié)果大致應(yīng)該是這樣的:
PS C:\Users\Hong> (ipconfig) Windows IP 配置 無線局域網(wǎng)適配器 本地連接* 13: 媒體狀態(tài) . . . . . . . . . . . . : 媒體已斷開 連接特定的 DNS 后綴 . . . . . . . : 無線局域網(wǎng)適配器 Wi-Fi: 連接特定的 DNS 后綴 . . . . . . . : 本地鏈接 IPv6 地址. . . . . . . . : fe80::a438:a0ec:e477:94c6%12 IPv4 地址 . . . . . . . . . . . . : 192.168.1.102 子網(wǎng)掩碼 . . . . . . . . . . . . : 255.255.255.0 默認(rèn)網(wǎng)關(guān). . . . . . . . . . . . . : 192.168.1.1 ……(此處省略了其它網(wǎng)卡)
我們想要看本機(jī)配置的ip地址,那么只需要看以IPv4開頭的行即可。那么我們就可以簡(jiǎn)單的以”IPv4“來作為匹配的關(guān)鍵字。所以,PowerShell命令就可以寫作:
(ipconfig) -match 'IPv4'
這里為什么要把ipconfig用小括號(hào)括起來呢?因?yàn)槲覀冎纈pconfig本身也有一些參數(shù),為了不讓系統(tǒng)誤以為-match也是我們指定給ipconfig的參數(shù),我們就給ipconfig加了一對(duì)小括號(hào)。小括號(hào)優(yōu)先執(zhí)行,呵呵,就是告訴系統(tǒng),ipconfig是獨(dú)立的整體。
在示例中,ipconfig執(zhí)行后的結(jié)果是一個(gè)字符串?dāng)?shù)組。數(shù)組的每一個(gè)元素就是輸出的每一行,也就是說有多少行輸出,就有多少個(gè)數(shù)組元素。match參數(shù)對(duì)數(shù)組的操作,就是從數(shù)組元素中找到匹配的元素,把匹配到的元素輸出出來。
2.match 提取內(nèi)容
使用正則表達(dá)式,除了可以確定字符串是否匹配某一個(gè)正則表達(dá)式規(guī)則之外,另一個(gè)很重要的應(yīng)用就是從字符串中提取出指定的內(nèi)容。什么意思呢,舉個(gè)例子,一個(gè)字符串中有出現(xiàn)連續(xù)的三個(gè)數(shù)字,我們想很方便的把這三個(gè)數(shù)字提取出來,那么就可以用正則表達(dá)式。
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
在上面的示例中,我們指定了一個(gè)字符串$str="abc123abc",這個(gè)字符串中包含了123這個(gè)連續(xù)三個(gè)數(shù)字。我們又定義了一個(gè)$pattern變量,這是一個(gè)正則表達(dá)式。我們直接運(yùn)行match時(shí),輸出為true,表示$str字符串中有連續(xù)的三個(gè)數(shù)字。
當(dāng)我們?cè)龠\(yùn)行$matches時(shí),輸出了123,這就是匹配到的值。$matches這個(gè)變量不是我們自定義的,它是一個(gè)系統(tǒng)變量。我們?cè)谠谶\(yùn)行match操作符時(shí),這個(gè)系統(tǒng)變量自動(dòng)獲取了值。
再來說一下為什么$matches有兩個(gè)值呢,我們把上面的例子修改一下。大家看看區(qū)別。
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變量的值作了修改,在前面加了一個(gè)abc。這個(gè)在$matches[0]的值就變成了abc123。這說明,$matches[0]表示的是與正則表達(dá)式相匹配的內(nèi)容。而$matches[1]及之后的內(nèi)容,則是對(duì)應(yīng)著正則表達(dá)式的一個(gè)個(gè)小括號(hào)里面匹配到的內(nèi)容。示例中我們只有一個(gè)小括號(hào),那只有$matches[1]。試想一下,如果正則表達(dá)式有多小括號(hào),則會(huì)有多個(gè)$matches元素值。
相關(guān)文章
Powershell實(shí)現(xiàn)獲取電腦序列號(hào)功能腳本分享
這篇文章主要介紹了Powershell實(shí)現(xiàn)獲取電腦序列號(hào)功能腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03PowerShell函數(shù)參數(shù)使用智能提示功能例子
這篇文章主要介紹了PowerShell函數(shù)參數(shù)使用智能提示功能例子,這個(gè)功能一般需要在PowerShell集成開發(fā)環(huán)境ISE中才會(huì)顯示智能提示,需要的朋友可以參考下2014-07-07Powershell使用嵌套哈希表實(shí)例 嵌套哈希表的2種寫法例子
這篇文章主要介紹了Powershell使用嵌套哈希表實(shí)例,嵌套哈希表的2種寫法例子,需要的朋友可以參考下2014-07-07PowerShell中直接輸出轉(zhuǎn)義字符或變量名稱的方法
這篇文章主要介紹了PowerShell中直接輸出轉(zhuǎn)義字符或變量名稱的方法,也就是原樣輸出字符串,不理會(huì)字符串可能包含的換行符、變量等,需要的朋友可以參考下2014-08-08PowerShell函數(shù)參數(shù)指定數(shù)據(jù)類型實(shí)例
這篇文章主要介紹了PowerShell函數(shù)參數(shù)指定數(shù)據(jù)類型實(shí)例,即強(qiáng)制參數(shù)的數(shù)據(jù)類型例子,需要的朋友可以參考下2014-07-07Powershell使用C#實(shí)現(xiàn)縮寫路徑
這篇文章主要介紹了Powershell使用C#實(shí)現(xiàn)縮寫路徑,縮寫路徑有時(shí)候是非常有用的,比如某些報(bào)表的路徑太長(zhǎng)會(huì)很難看,縮寫后就會(huì)好看許多,需要的朋友可以參考下2015-01-01