在Linux系统中,有多种方法可以精确删除文件的末尾行。下面我将介绍几种常用且可靠的方法。
# 删除最后一行
sed -i '$d' filename
# 删除最后N行(例如删除最后3行)
sed -i '$!N;$!N;$!D' filename # 删除最后3行
说明:
- -i
表示直接修改文件
- $d
表示删除最后一行
- 对于删除多行,$!N;$!N;$!D
中的N
和D
组合可以控制删除的行数
# 删除最后一行
head -n -1 filename > newfile && mv newfile filename
# 删除最后N行(例如删除最后5行)
head -n -5 filename > newfile && mv newfile filename
说明:
- head -n -N
显示除最后N行外的所有内容
- 需要重定向到临时文件再覆盖原文件
# 删除最后一行
awk 'NR>1{print line} {line=$0}' filename > newfile && mv newfile filename
# 删除最后N行(例如删除最后3行)
awk -v n=3 '{a[NR]=$0} END{for(i=1;i<=NR-n;i++) print a[i]}' filename > newfile && mv newfile filename
# 删除最后一行
tac filename | sed '1d' | tac > newfile && mv newfile filename
# 删除最后N行(例如删除最后4行)
tac filename | sed '1,4d' | tac > newfile && mv newfile filename
说明:
- tac
是cat
的反向输出,将文件从最后一行开始显示
- 反向后再删除前N行,最后再反向回来
-i
选项直接修改文件前,建议先备份head -n -N
语法可能不被支持# 备份文件后删除最后3行
cp important.log important.log.bak
head -n -3 important.log > temp.log && mv temp.log important.log
# 或者使用sed直接修改
sed -i.bak '$!N;$!N;$!D' important.log
以上方法都可以精确删除文件末尾的行,根据文件大小和系统环境选择最适合的方法即可。