2013-03-31 179 views
4

在Powershell中,如何搜索文本文件中的每行以獲取模式數組? Select-string的模式可以接受數組,但是如果找到數組中的任何字符串,它將返回一個真值。如果在該行中找到數組中的所有字符串,我需要它返回true(或實際上是行)。謝謝。PowerShell搜索字符串數組模式

回答

3

頂部匹配字符串數組對抗模式的陣列我相信你需要這樣的事:

$patterns = @(...) 

Get-Content sample.txt | % { 
    $count = 0 
    foreach ($p in $patterns) { 
    if ($_ -match $p) { $count++ } 
    } 
    if ($count -eq $patterns.Length) { $_ } 
} 

或像這樣:

$patterns = @(...) 

$content = Get-Content sample.txt 
foreach ($line in $content) { 
    $count = @($patterns | ? { $line -match $_ }).Length 
    if ($count -eq $patterns.Length) { $line } 
} 
+0

計數功能在這裏得到了這個工作。非常感謝。 – atownson

2

把我的頭

Get-Content file.txt | 
Where-Object {$_ -match $ptrn1 -and $_ -match $ptrn2 -and $_ -match $ptrn3} 
1

另一種可能性:

$patterns = 'abc','def','ghi' 
$lines = 'abcdefghi','abcdefg','abcdefghijkl' 


:nextline foreach ($line in $lines) 
{foreach ($pattern in $patterns) 
    {if ($line -notmatch $pattern){continue nextline} 
}$line} 

abcdefghi 
abcdefghijkl 

只要任何模式不匹配,就會放棄進一步處理線。

這工作對整個網上收集一次,而這樣做一個foreach:

$patterns = 'abc','def','ghi' 
$lines = 'abcdefghi','abcdefg','abcdefghijkl' 

foreach ($pattern in $patterns) 
{$lines = $lines -match $pattern} 
$lines 

abcdefghi 
abcdefghijkl 

替換您的獲取內容的測試文字來填充$行。