如何使用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?