shell檔案編輯工具,sed i與ed的區別

2021-05-25 10:08:03 字數 1081 閱讀 2356

[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...