如何在PowerShell中转义和替换'\'

时间:2018-10-29 07:38:14

标签: powershell

我们希望将主文件中的\替换为\\,这可以防止在Redshift上上传(一旦替换后的\\可以没有问题地上传并且可以一次上传) \,与原始客户数据相同。

我尝试将\替换为\\,但在PowerShell中收到了正则表达式错误:

Param(
    [string]$TargetFileName
)

# replace words
$old='`\'
$new='`\`\'

# replace \ to \\ for Redshift upload
$file_contents=$(Get-Content "$TargetFileName") -replace $old,$new
$file_contents > $StrExpFile

错误消息:

+ $file_contents=$(Get-Content "$TargetFileName") -replace $old,$new
+                  ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (`\:String) []、RuntimeException
    + FullyQualifiedErrorId : InvalidRegularExpression

仅执行-replace '\','\\'也不起作用。

我们希望将其保存为相同的文件名,但是文件大小可能很大,因此,如果您有更好的主意,也将非常感谢。

2 个答案:

答案 0 :(得分:5)

-Replace使用正则表达式,并且在RegEx \中是特殊字符(转义字符),因此要转义单个斜杠,您需要使用另一个斜杠:\\。请注意,这仅适用于$old(您要匹配的文本),替换文本$new不是正则表达式,因此在这里您仍然只需要\\

$old = '\\'
$new = '\\'
$file_contents = (Get-Content "$TargetFileName") -replace $old,$new

或者,您可以使用不使用正则表达式的.replace()方法:

$old = '\'
$new = '\\'
$file_contents = (Get-Content "$TargetFileName").replace($old,$new)

答案 1 :(得分:0)

我使用带有参数的命令,该命令将store:Schema="abcd"替换为空字符串,将"转换为""""""如下:

powershell -Command "$varStr='store:Schema=""abcd""""'; $filePath='%~dp0SomeFolder\SomeFile.txt'; (gc $filePath) -replace $varStr, '' | Out-File $filePath"