sed 用可打印字符替换不可打印字符

sed to replace non-printable character with printable character

Am 运行 BASHWindows 7 上的 UNIX 实用程序。

有一个包含垂直制表符的文件。二进制符号为0x0B。八进制符号为013。我需要用空白 space.

替换符号

尝试过这种sed方法但失败了:

sed -e 's/'$(echo "octal-value")'/replace-word/g'

具体来说:

sed -e 's/'$(echo "3")'/ /g'

更新:

按照 this advice 我使用 GNU sed 和这种方法:

sed -i 's:[=12=]x0B: :g' file

但顽固的垂直制表符仍在文件中。


用可打印字符替换不可打印字符的正确方法是什么?

Sed 应该识别特殊字符:

sed -e 's/\x0b/ /g'

为什么要回答-e?如果您使用多个 sed 表达式,那么每个表达式都必须以 -e 开头。所以,例如:

echo foo bar bas zer | sed -e 's/zer/oh my/g' -e 's/bas/baz/'

会导致:

foo bar baz oh my

因此只需一次调用即可执行 2 种不同的 sed 更改(“脚本”)。有关详细信息,请参阅 sed 手册页。

(上面的例子显然是人为的。然而,我在一个脚本中看到了一个 sed 命令,其中有 78 个 -e 'scripts'!)

如果你只有一个 'script',那么 -e 显然是可选的。