【问题标题】:sed to replace non-printable character with printable charactersed 用可打印字符替换不可打印字符
【发布时间】:2015-04-07 13:33:33
【问题描述】:

Windows 7 上运行BASH 和UNIX 实用程序。

有一个包含垂直制表符的文件。二进制符号是0x0B。八进制符号是013。我需要用空格替换符号。

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

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

具体来说:

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

更新:

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

sed -i 's:\0x0B: :g' file

但顽固的垂直标签仍在文件中。


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

【问题讨论】:

标签: sed


【解决方案1】:

Sed 应该能识别特殊字符:

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

【讨论】:

  • 正确,但是你为什么通过-e
  • @hek2mgl:因为某些版本的 sed 没有它就无法工作。
  • 想听! (可以想象你只是没有理由地这样做)。你能说出不支持省略 -e 的版本吗?
  • @hek2mgl:一些非 GNU 版本,IIRC。
  • @choroba 尝试了您的建议(使用 -e),但 0x0B 仍在输出文件中。对于 LHS,我尝试过 \0x0B 和 \x0B - 但 char 不会死。将尝试另一个版本的 sed。
【解决方案2】:

回答为什么-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 手册页。

(显然,上面的示例是人为的。但是,我在一个包含 78 个单独的 -e 'scripts' 的脚本中看到了一个 sed 命令!)

如果你只有一个“脚本”,那么 -e 显然是可选的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 2017-04-06
    • 1970-01-01
    • 2012-07-20
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多