ed:将第一行设置为默认当前行

ed:将第一行设置为默认当前行

我正在尝试用来ed编辑大文件的第一行,但我必须等待ed读取所有行。有什么方法可以停止ed读取整个文件并立即开始编辑,当前行是第一行?

答案1

正如 shellter 所指出的,ed不能这样做。大多数编辑操作都需要重写文件,只能就地进行替换,在这种情况下您可以使用hexedit(1).

最不占用内存的方法是使用sed操作,例如替换八月六月第一行:

sed '1s/August/June/' FILE > NEWFILE

答案2

ed使用编辑器打开文档后,无法停止读取整个文件或自动将编辑缓冲区的第一行设为当前行。

编辑ed器总是将您置于受命令影响的最后一行(或者当命令为 时紧接其后或之前d),并且在启动时读入文件类似于 using e filename,它会丢弃当前编辑缓冲区,打开指定文件进行编辑,并将当前行设置为从文件中读取的最后一行。

您是否想以非交互式方式对大型文档进行更改,然后使用sedawk可能提供更好的替代方案,因为这些工具在流上工作,并且默认情况下不会将完整文档读入内存。

如果您确实想对大型文档进行交互式编辑,您可能需要尝试使用 将文档分成多个块split,编辑您想要修改的块(使用edvi或任何其他编辑器),然后简单地使用cat来连接块重新组合在一起。


假设的编辑会话,用于编辑一个大文件的前 5 行ed

$编辑
嗯! head -n 5 大文件
123
克/^/m0
哇! { 猫 - ; tail -n +6 大文件 ; } >hugefile.new

也就是说,请求编辑 的输出head -n 5 hugefile。我在这里执行的编辑只是反转行(g/^/m0“依次将每行移动到第一行之前”)。然后将修改后的编辑缓冲区写出到 shell 命令,该命令将缓冲区的内容与原始文件的第 6 行及以后的内容连接起来。结果将写入新文件名。Q然后退出编辑器。

相关内容