使用sed替换十六进制字符串

使用sed替换十六进制字符串,sed,Sed,我在让sed查找/替换某些十六进制字符时遇到一些问题。我要替换以下十六进制字符串文件中的所有实例: 0x0D4D5348 0x0D0A4D5348 使用以下十六进制字符串: 0x0D4D5348 0x0D0A4D5348 我该怎么做 编辑:我正在尝试进行十六进制查找/替换。输入文件中没有“0x0D4D5348”的文本值,但它具有该文本值的ASCII表示形式。Howard Helman的GNU sed v3.02.80、GNU sed v1.03和HHsed v1.5 它们都支持表示法\x

我在让sed查找/替换某些十六进制字符时遇到一些问题。我要替换以下十六进制字符串文件中的所有实例:

0x0D4D5348
0x0D0A4D5348
使用以下十六进制字符串:

0x0D4D5348
0x0D0A4D5348
我该怎么做

编辑:我正在尝试进行十六进制查找/替换。输入文件中没有“0x0D4D5348”的文本值,但它具有该文本值的ASCII表示形式。

Howard Helman的GNU sed v3.02.80、GNU sed v1.03和HHsed v1.5 它们都支持表示法
\xNN
,其中“NN”是两个有效的十六进制数00-FF

以下是如何替换二进制文件中的十六进制序列:

$sed's/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x53\x48/g'文件>临时文件;rm文件;mv临时文件
正如@sputnik所指出的,您可以就地使用sed的
功能。但有一点需要注意,如果在OS/X上使用,则必须添加一组空引号:

$sed''s/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x53\x48/g'文件

作为OS/X上的sed
in-place
,指示在进行备份时要向文件名添加的扩展名,因为它首先创建临时文件。但是。。OS/X的
sed
\X

这在Linux和OSX上对我很有效

替换到位:

sed -i '.bk' 's'/`printf "\x03"`'/foo/g' index.html

(请参见@tolitius在回答中的@Ernest评论)

在OS/X系统的Bash中,可以使用如下命令:

#此命令将装箱一个名为a的变量,其中包含“\r\n”
a=`echo-e“你好\r\nworld\r\n第三行\r\n”`
回音“$a”| sed$'s/\r//g'| od-c
现在您可以看到输出字符:

0000000    h   e   l   l   o  \n   w   o   r   l   d  \n   t   h   e
0000020    t   h   i   r   d       l   i   n   e  \n
0000033
您应该注意到
的/\r//g'
$的/\r//g'
之间的区别。 基于上述实践,您可以使用这样的命令来替换十六进制字符串

echo "$a" | sed $'s/\x0d//g'  | od -c

我很感激你的回答,但我想我不是很清楚。我基本上想用0x0D0A替换行尾0x0D,但是我只想替换下一行开头包含字符“MSH”(十六进制格式为0x4D5348)的行尾。这更有意义吗?编辑您的原始消息比期望其他读者阅读所有评论、寻找您修订的规范更好。祝你好运谢谢你的提示。问题已修订。添加了一个关于OS X中sed的二进制值的注释不支持\X,是否有其他方法可以在OS X中使用?古代是一个相对术语。。。这帮了我的忙,谢谢你。