Select-PowerShell 中的字符串 cmdlet。解析括号

Select-String cmdlet in PowerShell. Parsing parenthesis

我将其存储在如下所示的文本文件中:

Java8更新111
Java8 更新 111(64 位)
Java 8 更新 131
Java 8 更新 151
Java8更新152

我正在使用 PowerShell 来处理这些信息,但遇到了第一个障碍。我正在使用 Select-String 来匹配模式,但它不起作用。

Select-String "\server\JavaVersions.txt" -Pattern "Java 8 Update 111 (64-bit)"

似乎没有用,但下面的两个都带回来了。

Select-String "\server\JavaVersions.txt" -Pattern "Java 8 Update 111"

有没有人知道为什么带括号的那个不起作用?是解析问题吗?我真的需要能够先获得 (64-bit) 一个,然后分别对它采取行动。

您必须转义特殊的正则表达式字符。在你的情况下括号。

Select-String '\server\JavaVersions.txt' -pattern "Java 8 Update 111 \(64-bit\)"

https://www.regular-expressions.info/characters.html

或者,使用 -SimpleMatch 关闭正则表达式匹配:

Select-String '\server\JavaVersions.txt' -Pattern 'Java 8 Update 111 (64-bit)' -SimpleMatch

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string?view=powershell-5.1

作为替代选项,如果您不需要为匹配使用正则表达式,则可以使用 -SimpleMatch 参数:

Select-String '\server\JavaVersions.txt' -SimpleMatch "Java 8 Update 111 (64-bit)"

然后您不需要进行任何正则表达式转义。