我们希望将主文件中的\
替换为\\
,这可以防止在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 '\','\\'
也不起作用。
我们希望将其保存为相同的文件名,但是文件大小可能很大,因此,如果您有更好的主意,也将非常感谢。
答案 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"