最常用且稳妥的方式是用 sed -i '$d' 删除文件最后一行,其中 $ 表示最后一行,d 表示删除,-i 表示原地修改;操作前建议备份并预览效果。

直接用 sed -i '$d' 就能删掉文件最后一行,这是最常用也最稳妥的方式。
用 sed -i '$d' 原地删除最后一行
这个命令里的 $ 是地址符号,代表“最后一行”,d 表示删除,-i 表示直接修改原文件(不输出到屏幕)。
- 执行前建议先备份:比如
cp file.txt file.txt.bak - 确认效果可先预览:运行
sed '$d' file.txt(不加-i),只打印结果,不改文件 - 如果文件为空或只有一行,执行后会变为空文件,属于预期行为
删除最后 N 行的写法
若尾部标记不止一行(比如连续 2~3 行冗余标记),可扩展使用:
- 删最后 2 行:
sed -i '$d;${x;/./{x;d;};x;}' file.txt(较复杂)——更推荐用head方式 - 实用替代:
head -n -2 file.txt > temp && mv temp file.txt - 注意:
head -n -N中的N是正整数,-2表示排除末尾 2 行
避免误删:先识别再操作
冗余尾部标记常有固定格式(如 === END ===、空行、时间戳等),可先定位再删,更安全:
- 查最后一行内容:
tail -n 1 file.txt - 确认是否匹配标记:
tail -n 1 file.txt | grep -q "END\|footer" && sed -i '$d' file.txt - 批量处理多个文件时,加
-i.bak自动保留备份:sed -i.bak '$d' *.log
其他轻量替代方案
不依赖 sed 也能达成目的,适合脚本中组合使用:
head -n -1 file.txt > file.txt.new && mv file.txt.new file.txt- 用
tac翻转 + 删首行 + 再翻回:tac file.txt | sed '1d' | tac > file.txt - awk 方式(适合嵌入复杂逻辑):
awk 'NR==FNR{lines=NR;next} NR<lines file.txt> tmp && mv tmp file.txt</lines>











