powershell在替换中转义转义字符

时间:2015-08-04 01:21:37

标签: string powershell replace escaping

更新 - 尝试的文本没有任何后退标记仍然没有替换。

我有一个带有这些记录的文件test.txt:

name="BLUE_TBL_AC_EA_FREQ"` owner="BLUE_TBL_AC_EA_FREQ"
name="BLUE_TBL_AC_EA_FREQ" owner="RED_TBL_AC_EA_FREQ"

我想替换name属性的字符串,所以我会使用

name="BLUE_TBL_AC_EA_FREQ"

在powershell脚本中。这是我做的,但输出文件不包含被替换的文本,它与输入相同。

然后我在批处理脚本

中使用具有此powershell命令的批处理脚本
powershell -Command "(Get-Content "test.txt") | Foreach-Object {$_ -replace 'name="BLUE_TBL_AC_EA_FREQ"', 'name="BLUE_TBL_ACEAFREQ"'} | Set-Content "testo.txt""

批处理脚本不会替换包含该字符串的字符串。 我做错了什么,我是否必须逃避字符串的双引号? 它仍然不适合我。

结束更新

我正在尝试使用Powershell替换使用后退标记的文件中的某些文本。 在文件中有文本,如

'名称=" BLUE_TBL_AC_EA_`FREQ"' 我想用

替换这个文本
' name="BLUE_TBL_ACEAFREQ"'

我在Powershell中使用的替换看起来像这样

powershell -command "& {(Get-Content "file.txt") | Foreach-Object {$_ -replace ' name="BLUE_TBL_AC_EA_`FREQ"', ' name="BLUE_TBL_ACEAFREQ"'} | Set-Content "fileO.txt;}"

' name =是必需的,因为有多个字符串包含name =" ... string。

当我使用此命令时,没有任何内容被替换。我试图通过使用双后退勾选(``)来逃避后面的勾号,但仍然没有任何东西被替换。 我搜索并阅读了很多关于Powershell和替换文本的文章以及转义角色的必要性。我以为我做了所需要的但没有任何东西被取代。

如何替换包含后退标记的文本?

2 个答案:

答案 0 :(得分:1)

看起来当在批处理脚本中使用替换并且文本包含后退字符或双引号时,所有后退标记和双引号都需要在批处理脚本中进行转义。 命令是

powershell -Command "(Get-Content "test.txt") | Foreach-Object {$_ -replace 'name="BLUE_TBL_AC_EA_FREQ"', 'name="BLUE_TBL_ACEAFREQ"'} | Set-Content "testo.txt""

变为:

powershell -Command "(Get-Content "test.txt") | Foreach-Object {$_ -replace 'name=\"BLUE_TBL_AC_EA_FREQ\"', 'name=\"BLUE_TBL_ACEAFREQ\"'} | Set-Content "testo.txt""

如果字符串中有后退标记,则必须使用反斜杠(例如

)对后退标记进行转义
\`

批处理脚本多么糟糕。 谢谢你帮我解决这个问题。

答案 1 :(得分:0)

我认为你的命令有错误,这就是它没有改变的原因。在分号之前的txt之后你错过了双引号。

我在我的powershell中尝试了这个,它正在运行。

(Get-Content "C:\test.txt") | Foreach-Object {$_ -replace ' name="BLUE_TBL_AC_EA_`FREQ"', ' name="BLUE_TBL_ACEAFREQ"'} | Set-Content "C:\test.txt"