如何在不读取整个文件或在任何临时文件中重写文件的情况下删除文件的最后一行。我不想使用sed,因为它将整个文件读入内存。 最后有一个空白行。我想删除它并将更改保存到该文件,以便文件最后不包含空行。
答案 0 :(得分:1)
简单的sed命令删除最后一行:
sed '$d' <file>
这里的sed $是最后一行。
您可以尝试使用awk命令:
awk 'NR > 1{print t} {t = $0}END{if (NF) print }' file
使用cat:
cat file.txt | head -n -1 > new_file.txt
答案 1 :(得分:0)
我能想到的最简单的方法是:
sed -i '${/^$/d}' filename
编辑只删除空白结束行。
您唯一不使用sed
无法读取整个文件的选项是stat
文件获取大小,然后使用dd
跳转到结束开始之前读。但是,告诉sed
仅在最后一行操作,基本上就是这样。
答案 2 :(得分:0)
看看
Remove the last line from a file in Bash
编辑:我测试了
dd if=/dev/null of=<filename> bs=1 seek=$(echo $(stat --format=%s <filename> ) - $( tail -n1 <filename> | wc -c) | bc )
它可以满足您的需求