我需要在Powershell中做类似Unix的ls | grep 'my[rR]egexp?'
。类似的表达式ls | Select-String -Pattern 'my[rR]egexp?'
似乎通过所列文件的内容,而不是简单地过滤文件名本身。
Select-String文档也没有多大帮助。
答案 0 :(得分:4)
很简单:
ls | where Name -match 'myregex'
但是还有其他选择:
(ls) -match 'myregex'
或者,根据您的正则表达式的复杂程度,您也可以通过简单的通配符匹配来解决它:
ls wild[ck]ard*.txt
比上述选项更快。如果你可以将它放入没有字符类的通配符匹配中,你也可以使用-Filter
参数Get-ChildItem
(ls
),它在文件系统级别执行过滤,因此甚至更快。另请注意,PowerShell默认情况下不区分大小写,因此不需要像[rR]
这样的字符类。
答案 1 :(得分:1)
在根据@Joey的回答进行研究的同时,我偶然发现了另一种方法(基于Select-String本身):
ls -Name | Select-String -Pattern 'my[Rr]egexp?'
-Name
参数似乎使ls
将结果作为普通字符串而不是FileInfo对象返回,因此Select-String
将其视为要搜索的字符串而不是列表要搜索的文件。