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

3
(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

我正在使用以下命令将文本文件中的~替换为字段分隔符。 该命令成功运行,但当我在notepad ++中打开输出文件时,我只看到了普通的\ 034。
例如:
Company_Identifier \ 034 Primary_Transaction_ID
但输出应该像下面这样。

enter image description here

请帮忙

1
尝试使用 -replace "~", [char]0x1C - Wiktor Stribiżew
太棒了...它起作用了.. - TomG
我是Powershell新手。您能否提供一些链接,让我更好地了解Powershell中的控制字符。在Unix中我们使用\034,但在Powershell中它不起作用。 - TomG
2个回答

3

使用

-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)

The `r (carriage return) is ignored in PowerShell (ISE) Integrated Scripting Environment host application console, it does work in a PowerShell console session.

Using the Escape character to avoid special meaning.

   ``  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

目前Windows PowerShell没有转义字符字面量的逃逸序列(请参见下文), 但是您可以在子表达式中将数字ASCII或Unicode值强制转换为[char]

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

同样地,您可以将相同的类型转换表达式作为最右边的操作数提供给 -replace,它会转换为一个单字符字符串:

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

PowerShell 6.0(目前处于测试版)引入了`u{}转义序列用于Unicode代码点字面量:

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

unicode literals in PowerShell 6.0.0-beta.7


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接