删除Unix文件中的^@字符

删除Unix文件中的^@字符,unix,sed,character,tr,invisible,Unix,Sed,Character,Tr,Invisible,我有一个关于删除不可见字符的问题,只有当我们尝试使用“vi”命令查看文件时才能看到这些字符。我们有一个由Datastage应用程序生成的文件(源是一个DB2表->目标是一个.txt文件)。文件包含具有不同数据类型的数据。我有一个问题,只有3列的数据类型定义为CHAR 如果你在文本板中打开文件,你会看到空格。但是,当您通过vi命令在Unix上查看同一文件时,我们会看到蓝色的^@字符。我的文件是一个分隔符文件,分隔符为^@^(我知道这听起来有点奇怪) 我试过: tr-d[:cntrl:]NewFil

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

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

我试过:

  • tr-d[:cntrl:]NewFileName
    -仍然没有运气-[分隔符被删除,但空格保留]
  • tr-s“^@”NewFilename
    -仍然不走运-我看到文件大小减小,但不可见字符仍然保留
  • 已尝试更改分隔符,但仍然可以看到相同的不可见字符

  • vi中使用
    sed“s/^@/g/”
    (和其他sed命令)
    ,NUL字符表示为
    ^@
    。要摆脱它们:

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

    tr -d '\000' < file-name > new-file-name
    
    tr-d'\000'新文件名
    
    使用vim打开文件,然后键入“:”而不使用单引号,然后粘贴以下内容:

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

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


    当然,替换为键盘上的键

    这是标记为“unix”,而不是“linux”-只有为
    tr
    给出的示例对“unix”标记有用。@ThomasDickey需要澄清吗?您的声明是否涵盖所有版本的unix?请阅读POSIX说明。在“vi”中,您描述的是“vim”,而在“sed”中,您描述的是GNU实现。对于这些情况,两者都不遵循POSIX。您不妨加入Perl。@ThomasDickey我已经做了一些更新。我离目标还远吗?事实上,对于vi,我发现这个URL描述了一个类似的解决方案来摆脱换行:谢谢Robby。。这起作用了,我的问题解决了。我非常感谢你抽出时间。托马斯:还有你的投入,我今天学到了一些新东西。