如何从 unix 中的文本文件中删除“^@”?

how to remove "^@" from text files in unix?

我正在尝试使用 Unix 平台从多个文本文件中删除“^@”。我已经找到 this 解决方案,但它不适用于我的情况。我还使用了 sed -i -e 's/^@//g' testfile.txtdos2unix testfile.txt。 示例数据放在 here.

如有任何建议,我们将不胜感激。

您看到的 ^@ 不是文字字符串。它是 NUL(字符值 0)的转义码。如果你想全部删除它们:

tr -d '[=10=]' <test.txt >newfile.txt

为了帮助诊断这类事情,od(八进制转储)实用程序非常方便。我 运行 在你链接的测试文件上,确认它们是 NULs:

$ od -c test.txt | head
0000000  [=11=]   A  [=11=]   i  [=11=]   r  [=11=]   Q  [=11=]   u  [=11=]   a  [=11=]   l  [=11=]   i
0000020  [=11=]   t  [=11=]   y  [=11=]   S  [=11=]   t  [=11=]   a  [=11=]   t  [=11=]   i  [=11=]   o
0000040  [=11=]   n  [=11=]   E  [=11=]   o  [=11=]   I  [=11=]   C  [=11=]   o  [=11=]   d  [=11=]   e
0000060  [=11=]  \n  [=11=]   D  [=11=]   E  [=11=]   H  [=11=]   E  [=11=]   0  [=11=]   4  [=11=]   4
*
0000400  [=11=]  \n  [=11=]   D  [=11=]   E  [=11=]   H      [=11=]   E  [=11=]   0  [=11=]   4  [=11=]
0000420   4  [=11=]  \n  [=11=]   D  [=11=]   E  [=11=]   H  [=11=]   E  [=11=]   0  [=11=]   4  [=11=]
*
0422160   4  [=11=]  \n  \n
0422164