3 回答
TA贡献1850条经验 获得超11个赞
这是迄今为止最快,最简单的解决方案,尤其是在大文件上:
head -n -1 foo.txt > temp.txt ; mv temp.txt foo.txt
如果要删除第一行,请使用以下命令:
tail -n +2 foo.txt
这意味着输出线从第2行开始。
请勿sed用于删除文件顶部或底部的行-如果文件很大,这将非常慢。
TA贡献1806条经验 获得超8个赞
使用GNU sed:
sed -i '$ d' foo.txt
该-i选项在GNU sed3.95之前的版本中不存在,因此您必须将其用作带有临时文件的过滤器:
cp foo.txt foo.txt.tmp
sed '$ d' foo.txt.tmp > foo.txt
rm -f foo.txt.tmp
当然,在这种情况下,您也可以使用head -n -1代替sed。
苹果系统:
在Mac OS X(从10.7.4版开始)上,上述sed -i命令等效于
sed -i '' -e '$ d' foo.txt
TA贡献1794条经验 获得超7个赞
我在这里遇到的所有问题都遇到了麻烦,因为我正在使用巨大的文件(〜300Gb),并且没有一种解决方案可以扩展。这是我的解决方案:
dd if=/dev/null of=<filename> bs=1 seek=$(echo $(stat --format=%s <filename> ) - $( tail -n1 <filename> | wc -c) | bc )
换句话说:找出要结束的文件的长度(文件的长度减去最后一行的长度,使用bc),然后将该位置设置为文件的结尾(将的dd一个字节 /dev/null写入它)。
这是快速的,因为tail从头开始读取,并且dd将覆盖原位文件,而不是复制(和解析)文件的每一行,这是其他解决方案所做的。
注意:这将从适当的文件中删除该行!在尝试对自己的文件进行备份之前,请对虚拟文件进行备份或测试!
- 3 回答
- 0 关注
- 772 浏览
添加回答
举报