删除Unix文件中的^@字符
我有一个关于删除不可见字符的问题,只有当我们尝试使用“vi”命令查看文件时才能看到这些字符。我们有一个由Datastage应用程序生成的文件(源是一个DB2表->目标是一个.txt文件)。文件包含具有不同数据类型的数据。我有一个问题,只有3列的数据类型定义为CHAR 如果你在文本板中打开文件,你会看到空格。但是,当您通过vi命令在Unix上查看同一文件时,我们会看到蓝色的^@字符。我的文件是一个分隔符文件,分隔符为^@^(我知道这听起来有点奇怪) 我试过:删除Unix文件中的^@字符,unix,sed,character,tr,invisible,Unix,Sed,Character,Tr,Invisible,我有一个关于删除不可见字符的问题,只有当我们尝试使用“vi”命令查看文件时才能看到这些字符。我们有一个由Datastage应用程序生成的文件(源是一个DB2表->目标是一个.txt文件)。文件包含具有不同数据类型的数据。我有一个问题,只有3列的数据类型定义为CHAR 如果你在文本板中打开文件,你会看到空格。但是,当您通过vi命令在Unix上查看同一文件时,我们会看到蓝色的^@字符。我的文件是一个分隔符文件,分隔符为^@^(我知道这听起来有点奇怪) 我试过: tr-d[:cntrl:]NewFil
tr-d[:cntrl:]NewFileName
-仍然没有运气-[分隔符被删除,但空格保留]tr-s“^@”NewFilename
-仍然不走运-我看到文件大小减小,但不可见字符仍然保留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。。这起作用了,我的问题解决了。我非常感谢你抽出时间。托马斯:还有你的投入,我今天学到了一些新东西。