簡體   English   中英

如何在PowerShell中過濾文件名模式?

[英]How can I filter filename patterns in PowerShell?

我需要做一些與Unix的ls | grep 'my[rR]egexp?'類似的事情ls | grep 'my[rR]egexp?' ls | grep 'my[rR]egexp?' 在Powershell中。 ls | Select-String -Pattern 'my[rR]egexp?' ls | Select-String -Pattern 'my[rR]egexp?' 似乎遍歷列出文件的內容 ,而不是簡單地過濾文件名本身。

Select-String文檔也沒有太大幫助。

很簡單:

ls | where Name -match 'myregex'

但是,還有其他選擇:

(ls) -match 'myregex'

或者,根據您的正則表達式的復雜程度,您也可以使用簡單的通配符匹配來解決它:

ls wild[ck]ard*.txt

比上面的選項要快。 而且,如果您可以將其放入不帶字符類的通配符匹配中,則也可以僅對Get-ChildItemls )使用-Filter參數,該參數在文件系統級別執行過濾,因此速度更快。 另請注意,PowerShell默認情況下不區分大小寫,因此不需要[rR]這樣的字符類。

在基於@Joey的答案進行研究時,我偶然發現了另一種實現該目標的方法(基於Select-String本身):

ls -Name | Select-String -Pattern 'my[Rr]egexp?'

-Name參數似乎使ls以純字符串而不是FileInfo對象的形式返回結果,因此Select-String將其視為要搜索的字符串而不是要搜索的文件列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM