我正在嘗試用來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
然後退出編輯器。