加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 在unix命令行中删除文件的前N行

发布时间:2020-12-15 18:26:04 所属栏目:安全 来源:网络整理
导读:我正在尝试从非常非常大的文件中删除前37行.我开始尝试使用sed和awk,但它们似乎需要将数据复制到新文件中.我正在寻找一个“删除就地线”的方法,与sed -i不同,它不是制作任何类型的副本,而只是从现有文件中删除行. 这就是我所做的…… awk 'NR 37' file.xml '
我正在尝试从非常非常大的文件中删除前37行.我开始尝试使用sed和awk,但它们似乎需要将数据复制到新文件中.我正在寻找一个“删除就地线”的方法,与sed -i不同,它不是制作任何类型的副本,而只是从现有文件中删除行.

这就是我所做的……

awk 'NR > 37' file.xml > 'f2.xml'
sed -i '1,37d' file.xml

这两个似乎都做了完整的副本.是否还有其他简单的CLI可以在没有完整文档遍历的情况下快速完成此操作?

使用UNIX实用程序进行内部编辑没有简单的方法,但这里有一个就地文件修改解决方案,您可以修改它以便为您工作(由Robert Bonomi在 https://groups.google.com/forum/#!topic/comp.unix.shell/5PRRZIP0v64提供):
count=$(head -37 "$file" |wc -c)
dd if="$file" bs="$count" skip=1 of="$file"

最终文件应该比原始文件小$count个字节(因为目标是从头开始删除$count个字节),所以要完成我们必须删除最后的$count个字节.在诸如Linux的GNU系统上,这可以通过以下方式实现:

truncate -s "-$count" "$file"

请参阅我引用的google groups主题以获取其他建议和信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读