Powershell搜索字符串数组的字符串

时间:2013-03-31 03:58:41

标签: string powershell design-patterns

在Powershell中,您如何在文本文件中搜索每一行模式? Select-string的模式可以接受数组,但如果找到数组中的任何字符串,它将返回true值。如果在行中找到数组中的所有字符串,我需要它返回true(或实际上是行)。感谢。

3 个答案:

答案 0 :(得分: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 }
}

答案 1 :(得分:2)

脱离我的头顶

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

答案 2 :(得分: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

将您的get-content替换为测试文字以填充$ lines。