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

前端之家收集整理的这篇文章主要介绍了bash – 在unix命令行中删除文件的前N行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试从非常非常大的文件删除前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主题获取其他建议和信息.

猜你在找的Bash相关文章