删除文件的最后一行,最简单的方法是使用 sed
,因为 sed
提供了 $
代表最后一行,所以删除最后一行就是使用:
sed -i '$ d' foo.txt
另外一种方式使用 head
命令,因为 head
命令提供了 -n -1
表示输出倒数第一行之前内容(这个命令也提供了删除倒数X行的思路):
head -n -1 foo.txt > bar.txt
对于非常巨大的文件(~300Gb),也有人提出了一个思路,就是定位最后一行的文件位置,然后通过 dd
命令抹除掉(记录备用):
filename="example.txt"
file_size="$(stat --format=%s "$filename")"
trim_count="$(tail -n1 "$filename" | wc -c)"
end_position="$(echo "$file_size - $trim_count" | bc)"
dd if=/dev/null of="$filename" bs=1 seek="$end_position"
上述脚本也可以用一行替代
dd if=/dev/null of=<filename> bs=1 seek=$(echo $(stat --format=%s <filename> ) - $( tail -n1 <filename> | wc -c) | bc )
上述操作务必小心,建议先备份文件