【问题标题】:Remove ^@ Characters in a Unix File删除 Unix 文件中的 ^@ 字符
【发布时间】:2015-10-29 00:40:37
【问题描述】:

我有一个关于删除不可见字符的问题,这些不可见字符只有在我们尝试使用“vi”命令查看文件时才能看到。我们有一个由 Datastage 应用程序生成的文件(源是一个 DB2 表 -> 目标是一个 .txt 文件)。文件具有不同数据类型的数据。我只有 3 列的数据类型定义为 CHAR 的问题。

如果您在文本板中打开文件,您会看到空格。但是当你在 Unix 上通过 vi 命令查看同一个文件时,我们会看到蓝色的 ^@ 字符。我的文件是一个分隔符文件,分隔符为 ^@^(我知道这听起来有点奇怪)。

我试过了:

  1. tr -d [:cntrl:] <Filename >NewFileName — 仍然没有运气 — [分隔符被删除,但空格仍然存在]
  2. tr -s "^@" <Filename >NewFilename — 仍然没有运气 — 我看到文件减小了文件大小,但不可见字符仍然存在。
  3. 尝试更改分隔符 - 但仍然看到相同的不可见字符。
  4. 使用 sed "s/^@/g/"(和其他 sed 命令)<Filename — 仍然没有运气。

非常感谢任何建议。我已经研究了这个网站上的帖子,但我找不到。如果这很简单,请原谅我并分享您的想法。

【问题讨论】:

    标签: unix sed character tr invisible


    【解决方案1】:

    vi 中,NUL 字符表示为^@。要摆脱它们:

    tr

    使用 tr,您应该能够删除 NUL 字符,如下所示:

    tr -d '\000' < file-name > new-file-name
    

    【讨论】:

    • 这被标记为“unix”,而不是“linux” - 只有为 tr 给出的示例对“unix”标记有用。
    • @ThomasDickey 需要澄清一下吗?您的声明是否涵盖了所有版本的 unix?
    • 尝试阅读 POSIX 描述。在“vi”中描述的是“vim”,而在“sed”中描述的是 GNU 实现。对于这些情况,都不遵循 POSIX。你也可以在 Perl 中折腾。
    • @ThomasDickey 我做了一些更新。我离目标还远吗?实际上,对于 vi,我发现这个 URL 描述了一个类似的解决方案来摆脱换行符:tech-recipes.com/rx/150/…
    • 谢谢罗比..这很有效,我的问题解决了。我真的很感激你的时间。托马斯也您的意见,我今天学到了一些新东西。
    【解决方案2】:

    用 vim 打开文件,然后输入不带单引号的 ':' 并粘贴:

    %s/control + 2//g(在普通 PC 上)

    %s/control + shift + 2 //g(在 Mac PC 上)

    当然,用键盘上的键替换

    【讨论】:

      猜你喜欢
      • 2016-10-17
      • 2016-08-16
      • 2017-06-01
      • 2013-09-25
      • 1970-01-01
      • 2019-08-09
      • 2022-09-27
      • 1970-01-01
      • 2019-05-15
      相关资源
      最近更新 更多