Powershell - 用以美元符号结尾的变量替换字符串

时间:2012-08-31 13:43:14

标签: regex string powershell replace

我对这个有点失落。无论出于何种原因,powershell中的替换函数对于以$符号结尾的变量不能很好地发挥作用。

命令:

$var='A#$A#$'
$line=('$var='+"'"+"'")
$line -replace '^.+$',('$line='+"'"+$var+"'")

预期产出:

$line='A#$A#$'

实际输出:

$line='A#$A#

3 个答案:

答案 0 :(得分:4)

看起来你正在受到你不想要的正则表达式替换。正则表达式特殊变量$'表示匹配后的所有内容。由于正则表达式匹配整个字符串,$'实际上是空的。在替换操作期间,.Net正则表达式引擎在预期输出中看到$'并替换为该空字符串。

避免这种情况的一种方法是用$替换$var字符串中$$的所有实例:

$line -replace '^.+$',('$line='+"'"+($var.Replace('$','$$'))+"'")

您可以在此处查看有关正则表达式替换的更多信息:

<强> Substitutions

答案 1 :(得分:0)

我能够通过用特殊字符替换$然后在更改后将其还原来找到各种各样的创可贴。您最好选择键盘上没有键的字符。对我来说,我选择了“¤”。

$var='A#$A#$'
$var=$var -replace '\$','¤'
$line=("`$var=''")
$line -replace '^.+$',("`$line='$var'") -replace '¤','$'

答案 2 :(得分:0)

我真的不明白你张贴的线条的目的,在我看来,做$line='$line='''+$var+"'"会更有意义,但如果你坚持你的方式,只需要两个< / strong>更换电话,如下:

$line -replace '^.+$',('$line=''LOL''') -replace 'LOL',$var