4

我想将从 x'00 到 x'40' 的一系列十六进制字符替换为文件中的空格。我不想为他们每个人写一个 sed -e 's/\x00//g' ..有没有更有效的方法来做到这一点?

4

3 回答 3

4

这可能会为您完成,具体取决于您的环境和 sed 版本。(它避免了与制表符混淆,但没有理由避免使用空格,因为您只是用另一个空格替换它。)

LANG='' sed 's/[\x00-\x08\x0A-\x40]/ /g'

这会在 sed 命令期间清除 LANG。例如,如果您的环境是 UTF8,那可以解决一些问题。

于 2013-04-12T16:07:16.807 回答
0

使用tr而不是sed. 首先,您必须将字符代码从十六进制转换为八进制。假设您想要 0 到 77 八进制。这里是:

tr '\0-\77' ' ' < your-input-file
于 2013-04-12T14:58:12.923 回答
0

这个:

LC_ALL=C sed 's/[\x00-\x40]/ /g'

或粗糙:

(LC_ALL=C; sed 's/[\x00-\x40]/ /g')

测试:

alias hxr="perl -ne'for(split){print chr hex}'"

printf '%02X ' `seq 65` | hxr | hd

printf '%02X ' `seq 65` | hxr | LC_ALL=C sed 's/[\x00-\x40]/ /g'; echo
于 2016-05-13T15:56:32.207 回答