我有一些麻烦习惯做一些十六进制字符的查找/替换。我想替换以下十六进制字符串文件中的所有实例:
0x0D4D5348
包含以下十六进制字符串:
0x0D0A4D5348
我该怎么做呢?
编辑:我正试图做一个十六进制查找/替换。输入文件中没有"0x0D4D5348"的文字值,但它确实有其中的ASCII表示形式。
GNU sed v3.02.80, GNU sed v1.03和HHsed v1.5由Howard Helman编写都支持符号xNN
,其中"NN"是两个有效的十六进制数,00-FF。
$ sed 's/x0Dx4Dx53x48/x0Dx0Ax4Dx53x48/g' file > temp; rm file; mv temp file
正如@sputnik指出的,您可以使用sed的in place
功能。需要注意的是,如果你在OS/X上使用它,你必须添加一组空引号:
$ sed '' 's/x0Dx4Dx53x48/x0Dx0Ax4Dx53x48/g' file
OS/X上的sed in place
使用一个参数来表示在进行备份时要向文件名添加什么扩展名,因为它会先创建一个临时文件。但后来. .OS/X的sed
不支持x
这在Linux和OSX上对我有效。
取代就地:sed -i '.bk' 's'/`printf "x03"`'/foo/g' index.html
(参见@Ernest在@tolitius的回答中的评论)
在OS/X系统的Bash中,你可以使用这样的命令:
# this command will crate a variable named a which contains 'rn' in it
a=`echo -e "hellornworldrnthe third linern"`
echo "$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
您应该注意到's/r//g'
和$'s/r//g'
之间的区别。基于上述实践,您可以使用这样的命令来替换十六进制字符串
echo "$a" | sed $'s/x0d//g' | od -c