使用sed替换十六进制字符串
我在让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
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上的sedin-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中使用?古代是一个相对术语。。。这帮了我的忙,谢谢你。