我正在尝试用来ed
编辑大文件的第一行,但我必须等待ed
读取所有行。有什么方法可以停止ed
读取整个文件并立即开始编辑,当前行是第一行?
答案1
正如 shellter 所指出的,ed
不能这样做。大多数编辑操作都需要重写文件,只能就地进行替换,在这种情况下您可以使用hexedit(1)
.
最不占用内存的方法是使用sed
操作,例如替换八月和六月第一行:
sed '1s/August/June/' FILE > NEWFILE
答案2
ed
使用编辑器打开文档后,无法停止读取整个文件或自动将编辑缓冲区的第一行设为当前行。
编辑ed
器总是将您置于受命令影响的最后一行(或者当命令为 时紧接其后或之前d
),并且在启动时读入文件类似于 using e filename
,它会丢弃当前编辑缓冲区,打开指定文件进行编辑,并将当前行设置为从文件中读取的最后一行。
您是否想以非交互式方式对大型文档进行更改,然后使用sed
或awk
可能提供更好的替代方案,因为这些工具在流上工作,并且默认情况下不会将完整文档读入内存。
如果您确实想对大型文档进行交互式编辑,您可能需要尝试使用 将文档分成多个块split
,编辑您想要修改的块(使用ed
或vi
或任何其他编辑器),然后简单地使用cat
来连接块重新组合在一起。
假设的编辑会话,用于编辑一个大文件的前 5 行ed
:
$编辑 嗯! head -n 5 大文件 123 克/^/m0 哇! { 猫 - ; tail -n +6 大文件 ; } >hugefile.new 问
也就是说,请求编辑 的输出head -n 5 hugefile
。我在这里执行的编辑只是反转行(g/^/m0
“依次将每行移动到第一行之前”)。然后将修改后的编辑缓冲区写出到 shell 命令,该命令将缓冲区的内容与原始文件的第 6 行及以后的内容连接起来。结果将写入新文件名。Q
然后退出编辑器。