如何从 vi 中显示为 @ 的文件中删除空行

如何从 vi 中显示为 @ 的文件中删除空行

当我用 vi 打开文件时

作为

vi file

Current partition replica assignment
@
@
@
@
@
{"version":1,"partitions":[{"topic")]
@
@
@
@
@
Proposed partition reassignment configuration

但我尝试删除这个空行

作为

sed -i 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file

或者

sed -i '/^$/d'  file

或者

sed -i '/^$/d' file

仍然文件有空行

如何删除空行/空白行?

答案1

那些是不是空行,但即使在换行后,行也太长而无法在屏幕上显示。

$ perl -e 'print "foo\n", "bar " x 4096' >/tmp/file
$ vim /tmp/file

foo
@
@
@
...

这就是标准说:

在可视模式下,如果编辑缓冲区中的一行(当前行除外)不完全适合显示底部可用于其呈现的行,则编辑器可以选择不显示该行的任何部分。因此,不包含来自编辑缓冲区的文本的显示行应由单个“@”字符组成。

另请参阅vim有关该选项的文档display

当既不包含“lastline”也不包含“truncate”时,不适合的最后一行将替换为“@”行。

不要将它们与空字节混淆,空字节通常显示为^@(注意插入符号)。另外,这种行为并不通用(它似乎没有在 中实现nvi)。

答案2

这对我来说很有效。也许你的文件应该有 dos null 值......

查看:

vim -b file

转换为unix

dos2unix file

答案3

我相信这些是空字节。 cat -A file会将它们显示为^@

tr可以处理这些:

tr -d '\0' < file > file.new

相关内容