-
慕盖茨4494581
这是迄今为止最快,最简单的解决方案,尤其是在大文件上:head -n -1 foo.txt > temp.txt ; mv temp.txt foo.txt如果要删除第一行,请使用以下命令:tail -n +2 foo.txt这意味着输出线从第2行开始。请勿sed用于删除文件顶部或底部的行-如果文件很大,这将非常慢。
-
慕森卡
使用GNU sed:sed -i '$ d' foo.txt该-i选项在GNU sed3.95之前的版本中不存在,因此您必须将其用作带有临时文件的过滤器:cp foo.txt foo.txt.tmpsed '$ d' foo.txt.tmp > foo.txtrm -f foo.txt.tmp当然,在这种情况下,您也可以使用head -n -1代替sed。苹果系统:在Mac OS X(从10.7.4版开始)上,上述sed -i命令等效于sed -i '' -e '$ d' foo.txt
-
慕田峪9158850
我在这里遇到的所有问题都遇到了麻烦,因为我正在使用巨大的文件(〜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将覆盖原位文件,而不是复制(和解析)文件的每一行,这是其他解决方案所做的。注意:这将从适当的文件中删除该行!在尝试对自己的文件进行备份之前,请对虚拟文件进行备份或测试!