为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐4208626 2019-11-21 12:47:07
我需要使用bash脚本从巨大的文本文件中反复删除第一行。目前,我正在使用sed -i -e "1d" $FILE-但删除大约需要一分钟。有没有更有效的方法来实现这一目标?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超12个赞

试试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

壳牌为 tail

Shell将tail流程的标准输出重定向到$FILE

tail 从现在的空读取 $FILE

如果要删除文件中的第一行,则应使用:


tail -n +2 "$FILE" > "$FILE.tmp" && mv "$FILE.tmp" "$FILE"

在&&将确保该文件不被覆盖时,有一个问题。


查看完整回答
反对 回复 2019-11-21
?
jeck猫

TA贡献1909条经验 获得超7个赞

您可以使用-i来更新文件,而无需使用'>'运算符。以下命令将从文件中删除第一行并将其保存到文件中。


sed -i '1d' filename


查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 950 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信