微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux:提取文件的第一行

我正在使用OpenWrt和一个非常小的空间.

试图从文件提取第一行.该行需要进入变量并从文件删除.我可以使用head将它放入变量但不能使用tail,因为据我所知,我将不得不做尾文件> newFile和我没有空间存放第二个文件.

有人知道一个更好的技术吗?

解决方法:

编辑:您不能使用我的旧答案(见下文)与OpenWrt,因为OpenWrt不附带ed.多可惜.所以这里有两种方法

vi方式

vi也是一个真正的编辑器,所以以下内容将起作用:

vi -c ':1d' -c ':wq' file > /dev/null

我们用vi打开文件,并使用命令:1d删除第一行,然后:wq保存并退出,将所有输出重定向到/ dev / null.凉爽,干净,简洁.

哦,你当然会跑:

firstline=$(head -n1 file)

在运行此vi命令之前,将文件的第一行放入变量firstline.

注意.在内存很少的系统上,当文件很大时,此方法失败.

dd方式

dd是一个很酷的工具.其他答案中给出的dd方法确实很棒,但它们依赖于openWrt不附带的truncate实用程序.这是一个解决方法

firstline=$(head -n1 file)
linelength=$(head -n1 file | wc -c)
newsize=$(( $(wc -c < file) - $linelength ))
dd if=file of=file bs=1 skip=$linelength conv=notrunc
dd if=/dev/null of=file bs=1 count=0 seek=$newsize

这将适用于大文件和非常小的内存!最后一个dd命令扮演其他答案中给出的truncate命令的角色.

旧答案是:

您可以使用ed:

firstline=$(printf '%s\n' 1p d wq | ed -s file.txt)

在每次调用时,您将获得变量firstline中文件file.txt的第一行,并从文件删除此行.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐