我需要使用bash脚本从一个巨大的文本文件中反复删除第一行。

现在我正在使用sed - I -e "1d" $FILE -但它需要大约一分钟的时间来删除。

有没有更有效的方法来实现这个目标?


当前回答

应该显示除第一行以外的其他行:

cat textfile.txt | tail -n +2

其他回答

这一行代码可以做到:

echo "$(tail -n +2 "$FILE")" > "$FILE"

它可以工作,因为tail在echo之前执行,然后文件被解锁,因此不需要临时文件。

海绵util避免了对临时文件的杂耍:

tail -n +2 "$FILE" | sponge "$FILE"

你可以编辑文件:使用perl的-i标志,像这样:

perl -ni -e 'print unless $. == 1' filename.txt

这将使第一行消失。Perl将需要读取和复制整个文件,但是它会将输出保存在原始文件的名称下。

使用split怎么样?

man csplit
csplit -k file 1 '{1}'

可以使用vim这样做:

vim -u NONE +'1d' +'wq!' /tmp/test.txt

这应该更快,因为vim在处理时不会读取整个文件。