相当于grep -f的PowerShell

我正在寻找相当于grep --file=filename的PowerShell。 如果你不知道grep ,filename是一个文本文件,每一行都有一个你想匹配的正则expression式模式。

也许我错过了一些显而易见的东西,但Select-String似乎没有这个选项。

Select-String-Pattern参数支持一组模式。 所以你要找的是:

 Get-Content .\doc.txt | Select-String -Pattern (Get-Content .\regex.txt) 

这通过在doc.txt使用每个正则expression式(每行一个)来searchtextfile regex.txt

 PS) new-alias grep findstr PS) C:\WINDOWS> ls | grep -I -N exe 105:-a--- 2006-11-02 13:34 49680 twunk_16.exe 106:-a--- 2006-11-02 13:34 31232 twunk_32.exe 109:-a--- 2006-09-18 23:43 256192 winhelp.exe 110:-a--- 2006-11-02 10:45 9216 winhlp32.exe PS) grep /? 

我不熟悉grep,但是可以使用Select-String:

 Get-ChildItem filename.txt | Select-String -Pattern <regexPattern> 

你也可以用Get-Content来做到这一点:

 (Get-Content filename.txt) -match 'pattern' 

但是select-String似乎没有这个选项。

正确。 PowerShell 不是 * nix shells'工具集的克隆。

然而,自己build造这样的东西并不难:

 $regexes = Get-Content RegexFile.txt | Foreach-Object { new-object System.Text.RegularExpressions.Regex $_ } $fileList | Get-Content | Where-Object { foreach ($r in $regexes) { if ($r.IsMatch($_)) { $true break } } $false } 

也许?

 [regex]$regex = (get-content <regex file> | foreach { '(?:{0})' -f $_ }) -join '|' Get-Content <filespec> -ReadCount 10000 | foreach { if ($_ -match $regex) { $true break } }