2013-03-31 130 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 

替换您的获取内容的测试文字来填充$行。