[root@rac0 tmp]# file ed.b3db5b
ed.b3db5b: ascii text, with no line terminators
複製**
臨時檔案儲存的是純資料(無行結束符),而line_buffer有點像「元資料」,是記憶體中的乙個結構鍊錶,乙個節點乙個行資訊,儲存各行起始位移和長度
ed file命令下會在執行ed時一開始便將檔案全部讀取,資料去除換行符後存放到臨時檔案,行資訊儲存在line_buffer裡,然後進行相關操作
ed裡的命令w將根據buffer裡的記錄資訊將資料全部儲存回檔案
ed對檔案的編輯,可以說是在記憶體裡儲存了乙份檔案鏡象,通過w將資料從記憶體回寫到檔案
*****===比較*****====
所以sed -i 跟ed是二種不同的檔案編輯模式,
從執行模式來區別:
sed -i是將檔案存重新命名為臨時檔案後做為輸入流,按行讀取進行cycle處理,輸出儲存到與原檔案同名的新空檔案裡。
後者是將檔案一次全部讀取,然後將資料存放到記憶體buffer和臨時檔案裡,處理完後再通過w命令回寫入檔案
從編輯對像來區別:
sed跟ed的單元動作都是以行資料為物件的,也程為行操作。不同在於
sed -i 的處理過程中,儲存在記憶體裡二個buffer的是部分行資料,可能是一行或多行資料
ed 處理過程中,儲存在記憶體裡的是所有的行資訊。
從inode來區別:用inode來區分二者的編輯模式,也是一種方法
由於sed把原檔案rename了,結果的檔案inode已經非原來的inode了
這種情況下,可以加入sed -c操作,保留檔案的inode不變了
-c是gnu sed 提供的,其他unix下的sed冒似不一定有(悲具的unix)
********************==
這個題目出得有點讓人鬱悶,什麼叫「真正的編輯檔案」
真正的編輯檔案,比如c程式(不帶快取的檔案i/o)裡open檔案後,直接根據描述符,對檔案進行讀寫
而sed -i 實際上是流處理,ed在處理過程中實際上是在編輯「臨時檔案」
事實上個人覺得sed -i 跟ed都不是「真正的編輯」檔案
檔案編輯工具vim
一般模式 編輯模式 命令模式 移動游標的位置 按鍵 作用b或向左的方向鍵 游標向左移動乙個字元 l 小寫 或向右的方向鍵 游標向右移動乙個字元 k或向上的方向鍵 游標向上移動乙個字元 j或向下的方向鍵 游標向下移動乙個字元 ctrl b 文字頁面向前翻一頁 ctrl f 文字頁面向後翻一頁 數字0或...
Linux 檔案編輯工具 vim
vim 用法 vim 檔案路徑 vim 三個模式 命令模式 用來游標跳轉,即快速調整游標到想要編輯的位置。例如 游標快速移動到指定的行 在命令模式下按1g 或 gg 游標跳到第一行,按 g 游標跳轉到最後一行,按 3gg 游標跳轉到第三行 例如 游標快速移動到行首或行尾 按 end 鍵 游標跳到行尾...
shell檔案處理工具
vim etc resolve.conf 檢視dns 6.shell指令碼命令 1.diff diff file file 比較兩個檔案的不同 c 顯示周圍的行 u 按照一格式統一輸出生成補丁 r 比較兩個目錄中檔案的不同 pattch file file.path 打補丁 b 備份原檔案 2.gr...