我执行了以下ps命令,结果显示出奇怪的结果:
"version: 1.0.0.0, count: 1200000" -replace "1.0.0.0", "1.1.0.0"
结果是:

version: 1.1.0.0, count: 1.1.0.0

为什么字符串“1200000”被替换?

PS版本:
Name                           Value
----                           -----
PSVersion                      5.1.16299.98
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.16299.98
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

最佳答案

您需要转义.字符,因为这意味着正则表达式中的任何字符(换行符除外):

"version: 1.0.0.0, count: 1200000" -replace "1\.\0\.0\.0", "1.1.0.0"

由于'1.0.0.0'是正则表达式中"1200000"的完全匹配



另请:https://www.regular-expressions.info/dot.html

另一种选择是使用Regex.Escape方法



例如:
$EscapeString = [regex]::Escape("1.0.0.0")
"version: 1.0.0.0, count: 1200000" -replace $EscapeString, "1.1.0.0"

07-24 21:23