删除文件的最后一行不起作用?

删除文件的最后一行不起作用?

我有一个由 bash 脚本创建的 TXT 文件,最后我想删除该文件的最后一行空行。

head --lines=-1 r3.txt > r4.txt

sed '$d' r3.txt > r4.txt

cat r3.txt | head -n -1  > r4.txt

r4.txt 仍然有最后一个空行...

我在 Linux CentOS 6.x 服务器上。

这与行结束符(unix x windows)有什么关系吗?

有什么线索吗?

答案1

可能最后没有空行。

Unix 文本文件由行组成,每行以换行符 ( '\n', ^J, 0x0a) 结尾。也就是说,换行符不是行分隔符,而是行结束符。对于最后一行尤其如此,因此对于整个文件也是如此。

例如,一个文本文件包含

abc
def

当用以下命令查看时会看起来像这样xxd

0000000: 6162 630a 6465 660a                      abc.def.

0a你可以清楚地看到最后的单曲。另一方面,如果末尾有一个额外的空行,你会得到

0000000: 6162 630a 6465 660a 0a                   abc.def..

请注意,现在有 0a字节。

您还可以看到它用于wc -l计算行数。在第一个文件上,它将给出2,在第二个文件上它将给出3。另请注意,如果缺少最后的换行符(这意味着该文件实际上不是有效的文本文件,尽管大多数工具无论如何都能够处理它),wc则仅计算一行。

相关内容