替换powershell中的细节字符

时间:2014-04-18 11:55:47

标签: regex powershell replace

我正在尝试替换一个字符以在Powershell字符串中将其转义,以便稍后将其转换为JSON。我想用单引号后跟双引号替换cmdline中的双引号,以避免双引号。

我有这个字符串:user123" -a.exe

我想user123'" -a.exe

我尝试使用-replace函数的不同组合,如

$test -replace '"',''"'

但由于这些角色的特殊性,没有人工作。

提前感谢您的帮助

3 个答案:

答案 0 :(得分:3)

要强制Windows PowerShell按字面解释双引号,请使用反引号(`)字符。

PS C:\> $test = "user123`" -a.exe"
PS C:\> $test
user123" -a.exe
PS C:\> $test = $test -replace "`"","'`""
PS C:\> $test
user123'" -a.exe

要了解与报价一起使用的大多数变体和技巧,请键入

Help about_Quoting_Rules

在Powershell控制台上。

答案 1 :(得分:2)

你需要使用反引号(`)字符来转义特殊字符并使用 String.Replace 方法

$test = "user123`" -a.exe"
$test.replace("`"","`'`"")

结果:

user123'" -a.exe

答案 2 :(得分:2)

如果您正在处理操作引用文本,并发现转义规则令人困惑和/或导致混淆代码,您也可以将其作为here-strings处理。在here-string分隔符(@' - '@)中,正常引用规则不适用。它可以生成更长的代码,但可以更直观地阅读和调试,或者稍后进行维护。

$string = @'
 user123" -a.exe
'@

$match = @'
"
'@

$replace = @'
"'
'@

 $string.replace($match,$replace)

 user123"' -a.exe

这显然是一个微不足道的例子,但是随着引用文本的数量和增加,使用here-strings而不是使用转义字符构建参数内联的优势。