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的第一行,并从文件删除此行.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...