4

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

4

3 回答 3

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 }
}
于 2013-03-31T12:07:57.287 回答
2

在我的头顶

Get-Content file.txt | 
Where-Object {$_ -match $ptrn1 -and $_ -match $ptrn2 -and $_ -match $ptrn3}
于 2013-03-31T09:31:41.633 回答
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。

于 2013-03-31T16:44:01.750 回答