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