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然後退出編輯器。

相關內容