所以我试图根据必须同时满足的两个条件来过滤文本文件。
我想检查一下它检查 2 个条件并且两者都必须匹配的语法是什么。
(Get-Content -Path textfile.txt) -match ‘condition1’ -and ‘condition2’ | Set-Content output.txt
我尝试了上面的代码以及其他解决方案,例如 select-string ,但它是一个或条件,而不是严格匹配这两个条件
-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
方法。