使用sed替换一系列十六进制值

使用sed替换一系列十六进制值,sed,hex,Sed,Hex,我想将文件中从x'00到x'40'的一系列十六进制字符替换为空格。 我不想为它们中的每一个都写一个sed-e's/\x00//g。。有更有效的方法吗?使用tr而不是sed。首先,必须将字符代码从十六进制转换为八进制。假设你想要0到77八进制。这就是: tr '\0-\77' ' ' < your-input-file tr'\0-\77'my-input-file1是否有方法将tr合并为一个…如果您真正想要的是将“特殊”字符转换为空格,您可以尝试tr[:special:'-the[:sp

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

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

tr '\0-\77' ' ' < your-input-file
tr'\0-\77'<您的输入文件

这可能适合您,具体取决于您的环境和sed版本。(它避免了弄乱选项卡,但没有理由避免使用空格,因为您只是将其替换为另一个空格。)

这将在sed命令执行期间清除LANG。例如,如果您使用的是UTF8环境,则可以解决一些问题。

这是:

LC_ALL=C sed 's/[\x00-\x40]/ /g'
或粗略:

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


你的命令到底是做什么的。。更改任何以0开头的八进制值替换为77的八进制值的内容。我尝试了翻译,效果很好。。唯一的问题是我发现我必须消除列表中TAB和SPACE的八进制值。。命令分为三行:cat my input file |tr'\000-\010''tr'\012-\037''>my-input-file1是否有方法将tr合并为一个…如果您真正想要的是将“特殊”字符转换为空格,您可以尝试
tr[:special:'
-the[:special:]角色类可能更好地反映您的实际需求。正确。否则,这将导致众所周知的错误
sed:-e expression#1,char XX:Invalid collation character
。然而,我一直不明白为什么在UTF-8环境中会发生这种情况。再使用一个字节,i。E使用
\x0008
而不是
\x08
也没用。
(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