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

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

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


当前回答

tail +2 path/to/your/file

适用于我,不需要指定-n标志。原因请看Aaron的回答。

其他回答

您可以使用-i来更新文件,而不使用'>'操作符。下面的命令将从文件中删除第一行并将其保存到文件中(在幕后使用临时文件)。

sed -i '1d' filename

在N-1行上使用tail并将其定向到一个文件中,然后删除旧文件,并将新文件重命名为旧名称,这样做可以吗?

如果我以编程方式执行此操作,我将读取文件,并在读取每一行后记住文件偏移量,因此我可以查找回该位置以读取文件中少一行的文件。

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

cat textfile.txt | tail -n +2

这一行代码可以做到:

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

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

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

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