![删除文件的最后一行不起作用?](https://linux22.com/image/53129/%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E8%A1%8C%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F%20.png)
我有一个由 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
则仅计算一行。