(21)Powershell中的通配符

  1. 使用通配符進行文件的模糊查找


    Powershell 中的通配符可以實現模糊查找, 也就是說可以對一組項(而不是單個項)進行查找。例如,如果想查找 D:\MyPowerShell 目錄中所有擴展名爲 .ps1 的文件,可以執行以下命令:

PS C:\> Get-ChildItem D:\MyPowerShell\*.ps1
    目錄: D:\MyPowerShell
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2016-5-26     21:52       1100 3testparamStart.ps1
-a---         2016-5-26     22:22       2864 4testparamStart.ps1
-a---         2016-5-27     20:55       4536 CommentbasedHelp.ps1
-a---         2016-5-23     22:20        966 Diskinfo.ps1
-a---         2016-5-27     21:26        678 errorAction.ps1
...

    在以上語句中,星號 (*) 用作通配符,用於指定 .ps1 文件擴展名之前可以存在任意字符。因爲命令中包含文件擴展名,所以該命令返回的所有文件都必須帶有該擴展名,但不限文件名。


    除了星號通配符外,PowerShell 中還支持幾種其他通配符。

通配符說明示例
匹配不匹配
*與任意字符匹配a*A、ag、Agebaba、cat
?與指定位置中的一個字符嚴格匹配?mam、imccm
[]與一組字符匹配[a-d]geage、bgefge
[]與指定的字符匹配[bc]ookbook、cookaook

    

    Powershell 中的大多數 cmdlet 的某些參數都接受通配符。每個 cmdlet 的幫助中都說明了哪些參數允許使用通配符,哪些可以使用通配符。對於接受通配符的參數,它們的用法是不區分大小寫的。例如,?n 將返回 An、an、In、in、On、和 on。例如:

PS C:\> Get-Help Get-Process -Parameter Name
-Name <string[]>
    通過進程名稱指定一個或多個進程。可以鍵入多個進程名稱(以逗號分隔)或使用通配符。參數名(“Name”)爲可選項。
    是否必需?                    False
    位置?                        1
    默認值
    是否接受管道輸入?            true (ByPropertyName)
    是否接受通配符?              True

    從上面的語句參數說明中,可知 Get-Process 的-Name 參數可以接受通配符,所以纔可以對進程名進行模糊查找。例如:

PS C:\> Get-Process *shell
Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    436       6    46828      37320   155     3.20   4116 powershell


    通配符在單個參數可以混合使用。例如,要查找 D:\MyPowerShell 目錄下所以以字母m到q開頭的.ps1 文件,則執行以下命令:

PS C:\> Get-ChildItem D:\MyPowerShell\[m-q]*.ps1
    目錄: D:\MyPowerShell
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2016-5-26     22:58       3172 Mandatory.ps1
-a---         2016-5-31     22:13        780 manifest.ps1
-a---         2016-5-30     22:26       4100 MyTools.ps1
-a---         2016-5-26     23:18       3408 ParamCount.ps1
-a---         2016-5-26     23:10       3368 ParamHelp.ps1
-a---         2016-5-26     23:34       3672 ParamPattern.ps1
-a---         2016-5-26     23:13       3468 ParamSet.ps1
-a---         2016-5-27     20:44        404 PlacingHelp.ps1

    以上命令中使用範圍通配符 ([m-q]) 來指定文件名應以字母 m 到 q 開頭,並以 .ps1 爲擴展名的所有文件。


2. 使用通配符對關鍵字的模糊查找

    使用通配符可以對指定的關鍵字進行模糊查找。例如想查找當前目錄(D:\MyPowerShell)中,包含指定關鍵字 "ERROR" 的所有文本文件(.txt),可以執行以下語句:

PS D:\MyPowerShell> Select-String -Pattern ("ERROR") *.txt
Help.txt:335:               -ErrorAction, -ErrorVariable, -WarningAction, -WarningVariable,
Help.txt:513:                   -ErrorAction, -ErrorVariable, -WarningAction, -WarningVariable,

    查詢的結果的會顯示哪些文件包含指定的關鍵字,並出現在哪一行,以上例子中分別出現在335和513行。


    字符串的模糊搜索和查找在分析log 文件時會非常有用。 而 Select-String 可以使不用打開文件就文件中的關鍵字進行搜索,尤其是當不確定具體路徑是,使用該命令會非常方便。


總結

    Powershell 中的通配符可以實現文件以及指定關鍵字的模糊查找, 通配符只是正則表達式的一部分,所以也可以使用正則表達式進行模式匹配以及模糊查找。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章