我正在尝试从非常非常大的文件中删除前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"