SED加上“SED”;无与伦比的;奇怪的行为

SED加上“SED”;无与伦比的;奇怪的行为,sed,null,Sed,Null,我有一个如下所示的输入文件,我尝试使用sed进行一些转换: 原始文件: DATA: gt_alv LIKF zfica_paym_cancel_alv OCCURS 0 WITH HFADFR LINF. DATA: gt_out LIKF zfica_paym_cancel_out OCCURS 0 WITH HFADFR LINF. 我想根据十六进制值清除一些字符,但我从框中得到一个奇怪的行为。(在MobaXterm中运行) 当我跑步时: sed -e $'s/\x20/\x040/g'

我有一个如下所示的输入文件,我尝试使用sed进行一些转换:

原始文件:

DATA: gt_alv LIKF zfica_paym_cancel_alv OCCURS 0 WITH HFADFR LINF.
DATA: gt_out LIKF zfica_paym_cancel_out OCCURS 0 WITH HFADFR LINF. 
我想根据十六进制值清除一些字符,但我从框中得到一个奇怪的行为。(在MobaXterm中运行)

当我跑步时:

sed -e $'s/\x20/\x040/g' testsed.txt
输出为:

DATA:0gt_alv0LIKE0zfica_paym_cancel_alv0OCCURS000WITH0HEADER0LINE.
DATA:0gt_out0LIKE0zfica_paym_cancel_out0OCCURS000WITH0HEADER0LINE.
它按预期工作。但是当我尝试点击空值x00时,我得到以下错误:

sed -e $'s/\x00/\x040/g' testsed.txt
产生:

sed: unmatched '/'
我试过各种组合。以八进制给出ascii码根本不起作用。但是十六进制数只能从/x00 null中查找expect。有人能给我解释一下为什么会发生这种情况,如果可能的话,如何解决?莫巴有问题吗?多谢各位

对形式为$'string'的单词进行特殊处理。这个词扩展到 字符串,并按指定替换反斜杠转义字符 ANSI C标准

发件人:

您应该尝试转义模式中的
\

sed -e $'s/\\x00/\x040/g' null.txt 

shell字符串中不能有NUL字节,因为它向底层C库发出字符串结束的信号。使用能够正确处理字符串中的内部NUL字节的工具

perl -pe 's/\x00/\x40/g' testsed.txt

为什么要在模式前面放一个
$
?如果没有
$
sed-e's/\x00/\x040/g'testsed.txt
,它应该可以工作。如果没有$,它根本不会进行任何转换。这就是我首先使用$的原因,因为出于某种原因,如果没有它,它无法扩展Moba上的十六进制数。@Kenavoz-模式开头的
$
使其成为一种格式扩展,可以在许多shell中使用。如果没有它,则由sed来解释特殊字符。GNU sed对printf扩展有一些支持,但它是不完整的,即使如此,GNU sed默认只包括在有限数量的操作系统上。最好有一个更具可移植性的解决方案。@DmitriChubarov,这是一个Bash“C风格”字符串。