Powershell:如何使用-match来严格匹配条件?

问题描述 投票:0回答:1

所以我试图根据必须同时满足的两个条件来过滤文本文件。

我想检查一下它检查 2 个条件并且两者都必须匹配的语法是什么。

(Get-Content -Path textfile.txt) -match ‘condition1’ -and ‘condition2’ | Set-Content output.txt

我尝试了上面的代码以及其他解决方案,例如 select-string ,但它是一个或条件,而不是严格匹配这两个条件

powershell scripting
1个回答
0
投票

-and
运算符需要每一侧的完整表达式,因此您的操作应如下所示:

(Get-Content -Path textfile.txt) -match ‘condition1’ -and (Get-Content -Path textfile.txt) -match ‘condition2’

但是

-match
运算符仅返回
true
false
,因此这不会让您得到
textfile.txt
中两个条件都匹配的行(我认为这就是您想要的)。

为此,您可以使用

Where-Object
:

Get-Content -Path textfile.txt | Where-Object { $_ -match 'condition1' -and $_ -match 'condition2' }

这将返回

textfile.txt
中符合这两个条件的所有行。

另一种选择是使用

Select-String
cmdlet,但由于该 cmdlet 不允许您验证多个模式,因此您必须使用正则表达式将条件组合成一个模式,如下所示:

Get-Content -Path textfile.txt | Select-String -Pattern 'condition1.*condition2'

Select-String
cmdlet 很有用,因为它返回具有更多属性的对象,例如
LineNumber
Filename
等。但如果顺序可能颠倒或存在其他条件,则必须将其考虑在内正则表达式模式,或使用
Where-Object
方法。

© www.soinside.com 2019 - 2024. All rights reserved.