如何使用bash / sed脚本删除文本文件的第一行?
我需要使用bash脚本从一个巨大的文本文件中重复删除第一行。
现在我正在使用sed -i -e "1d" $FILE - 但删除操作大约需要一分钟。
有没有更有效的方法来实现这一点?
尝试GNU tail:
tail -n +2 "$FILE"
-nx :只需打印最后的x行。 tail -n 5会给你输入的最后5行。 +符号类型颠倒了参数并使tail打印了除第一个x-1行之外的任何内容。 tail -n +1会打印整个文件, tail -n +2除第一行之外的所有内容
GNU tail比sed快得多。 tail也可以在BSD上使用,并且-n +2标志在两个工具中都是一致的。 查看FreeBSD或OS X手册页以获取更多信息。
不过,BSD版本可能比sed慢得多。 我想知道他们是如何管理的; tail应该只是逐行读取一个文件,而sed执行相当复杂的操作,包括解释脚本,应用正则表达式等等。
注意:您可能会尝试使用
# THIS WILL GIVE YOU AN EMPTY FILE!
tail -n +2 "$FILE" > "$FILE"
但是这会给你一个空文件 。 原因是重定向( > )在shell调用tail之前发生:
$FILE tail创建一个新的过程 tail进程的stdout重定向到$FILE tail从现在空的$FILE读取 如果你想删除文件中的第一行,你应该使用:
tail -n +2 "$FILE" > "$FILE.tmp" && mv "$FILE.tmp" "$FILE"
&&将确保文件在出现问题时不会被覆盖。
您可以使用-i在不使用'>'操作符的情况下更新文件。 以下命令将从文件中删除第一行并将其保存到文件中。
sed -i '1d' filename
对于那些非GNU的SunOS,以下代码将有所帮助:
sed '1d' test.dat > tmp.dat
链接地址: http://www.djcxy.com/p/77059.html
上一篇: How can I remove the first line of a text file using bash/sed script?
