猿问

如何使用bash / sed脚本删除文本文件的第一行?

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

目前,我正在使用sed -i -e "1d" $FILE-但删除大约需要一分钟。

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


慕姐4208626
浏览 952回答 3
3回答

开心每一天1111

试试tail:tail -n +2 "$FILE"-n x:仅打印最后x几行。tail -n 5将为您提供输入的最后5行。该+标志那种反转的争论,使tail打印任何东西,但第一x-1线。tail -n +1将打印整个文件,tail -n +2除了第一行以外的所有内容,等等。GNU tail比.NET 快得多sed。tail在BSD上也可用,并且-n +2标记在两个工具之间是一致的。有关更多信息,请参见FreeBSD或OS X手册页。BSD版本可能比慢得多sed。我想知道他们是如何做到的;tail应该只逐行读取文件,同时sed执行相当复杂的操作,包括解释脚本,应用正则表达式等。注意:您可能会想使用# THIS WILL GIVE YOU AN EMPTY FILE!tail -n +2 "$FILE" > "$FILE"但这会给你一个空文件。原因是重定向(>)发生在tail外壳程序调用之前:Shell截断文件 $FILE壳牌为 tailShell将tail流程的标准输出重定向到$FILEtail 从现在的空读取 $FILE如果要删除文件中的第一行,则应使用:tail -n +2 "$FILE" > "$FILE.tmp" && mv "$FILE.tmp" "$FILE"在&&将确保该文件不被覆盖时,有一个问题。

jeck猫

您可以使用-i来更新文件,而无需使用'>'运算符。以下命令将从文件中删除第一行并将其保存到文件中。sed -i '1d' filename
随时随地看视频慕课网APP
我要回答