在powershell中用控制字符字段分隔符(\ 034)替换字符

时间:2017-10-14 13:44:28

标签: regex powershell control-characters

(Get-Content C:\Users\georgeji\Desktop\KAI\KAI_Block_2\Temp\KAI_ORDER_DATARECON3.NONPUBLISH) | Foreach-Object {$_ -replace "~", "\034"} | Set-Content C:\Users\georgeji\Desktop\KAI\KAI_Block_2\Temp\KAI_ORDER_DATARECON4.NONPUBLISH

我使用以下命令在Field Seperator中替换〜文本文件中的〜。 这个命令运行成功,但是当我在notepadd ++中打开输出文件时。我只是看到了普通的\ 034。

例如:

Company_Identifier \ 034Primary_Transaction_ID

但输出应该如下

enter image description here

请帮助

2 个答案:

答案 0 :(得分:1)

使用

-replace "~", [char]0x1C

如果您想在较长的字符串中使用它,可以使用

-replace "~", "more $([char]0x1C) text"

这里的要点是,在Powershell中,您不能使用八进制字符表示(也不是\xYY\uXXXX),因为它支持的转义序列仅限于(参见source

   `0  Null
   `a  Alert bell/beep
   `b  Backspace
   `f  Form feed (use with printer output)
   `n  New line
   `r  Carriage return
 `r`n  Carriage return + New line
   `t  Horizontal tab
   `v  Vertical tab (use with printer output)
     

PowerShell(ISE)集成脚本环境主机应用程序控制台中忽略`r(回车),它在PowerShell控制台会话中有效。

     

使用Escape字符以避免特殊含义。

   ``  To avoid using a Grave-accent as the escape character
   `#  To avoid using # to create a comment
   `'  To avoid using ' to delimit a string
   `"  To avoid using " to delimit a string

答案 1 :(得分:1)

Windows PowerShell目前没有(见下文)具有\034等字符文字的转义序列。

相反,你可以做的是在子表达式中将数字ascii或unicode值转换为[char]

"Company_Identifier$([char]0x1C)Primary_Transaction_ID"

同样,您可以向-replace提供与最右侧操作数相同的强制转换表达式,它将转换为单字符字符串:

... |Foreach-Object {$_ -replace "~", [char]0x1C} |...

PowerShell 6.0(目前处于测试阶段)为unicode代码点文字引入了`u{}转义序列:

... |Foreach-Object {$_ -replace "~", "`u{1C}"} |...

unicode literals in PowerShell 6.0.0-beta.7