![](/img/trans.png)
[英]How can I replace full lines where patterns are matched in 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-ChildItem
( ls
)使用-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.