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