在 Linux 終端上使用行編輯器 ed
GNU ed
命令是一個行編輯器。它被認為是標準的 Unix 文本編輯器,因為它是首個出現在 Unix 的文本編輯器,並且它曾經無處不在,你在任何一個 POSIX 系統中都能找到它(通常來說,你現在也可以)。在某種程度上,你可以很容易看出來它是第一個文本編輯器,因為它在許多方面的功能都十分基礎。和其他大多數的文本編輯器不同,它不會打開一個屬於自己的窗口或顯示區域,事實上,在默認情況下,它甚至不會提示用戶輸入文字。從另一個方面來說,它在交互功能上的缺失也可以成為一個優點。它是一個多功能的編輯器,你可以用簡短的命令控制它,無論是在互動式的命令行中,還是在編寫的 shell 腳本里。
安裝 ed
如果你正在使用 Linux 或者 BSD 的話,你很可能已經默認安裝了 ed
(在 Linux 上是 GNU 版 ed
,而在 BSD 上是 BSD 版 ed
)。但是,一些極簡的環境可能沒有包括 ed
,這也沒關係,你的發行版的軟體倉庫中很可能有 ed
可供下載。macOS 默認安裝了 BSD 版 ed
。
啟動 ed
當你啟動 ed
的時候,你的終端提示符不見了,看起來好像是 ed
停止運行了。其實它沒有,它只是在等待你輸入指令而已。
$ ed
為使 ed
顯示更詳細的信息,你可以輸入命令 p
讓它返回一個提示符:
$ ed
p
?
這個問號(?
)是默認的 ed
提示符。
緩衝區
當 ed
激活時,你其實是在和一個叫 緩衝區 的東西打交道。緩衝區是內存中的一塊區域。你並不會直接編輯文件,而是在編輯它對應的緩衝區。當你退出 ed
卻沒有把修改保存到磁碟的文件上時,所有的修改都會丟失,因為它們只在緩衝區里存在。(這對於一個已經習慣了初始的 草圖緩衝區 的資深 Emacs 用戶可能很耳熟。)
使用 ed 輸入文本
啟動 ed
後,你處於命令模式。這意味著你可以向編輯器發送指令,比如讓它顯示一個提示符,而不是空白區域。你可以使用 a
命令開始附加文本到當前的緩衝區,使用一個實心的點 .
來終止輸入。比如,下面的這個例子往緩衝區里附加了兩行文字(「hello world」 和 「hello ed」):
?
a
hello world
hello ed
.
使用點 .
終止輸入後,你將回到命令模式。
查看緩衝區
怎樣查看當前緩衝區里都有什麼呢?你可以輸入想要查看的行號,也可以使用 ,p
命令來顯示所有的行:
?
1
hello world
2
hello ed
,p
hello world
hello ed
寫入文件
如果你現在對文本很滿意,你可以使用 w
命令把緩衝區寫入到文件中,後面跟上目標文件名:
?
w example.txt
19
寫操作後顯示的那個數字代表著寫入到文件中的字元數。
讀取文件
除了使用 ed
來讀取文本,你也可以使用 r
命令把一個已經存在的文件載入到到緩衝區里:
?
r myfile.txt
另外,你也可以在啟動 ed
時,在它後面加上你想要載入到緩衝區里的文件名:
$ ed myfile.txt
編輯緩衝區
鑒於 ed
是一個文本編輯器,你當然可以使用一種特殊的語法來編輯緩衝區里的文本。使用 sed
或 vim
的用戶或許會覺得這個語法很熟悉。假設現在緩衝區里已經載入了一個文件:
$ ed myfile.txt
,p
This is an example document.
There is some text, but not much.
There is some errors, but not much.
如果你要把第一句話中的 document
修改為 file
,你可以先選擇目標行(1
),然後使用 s
命令調用搜索函數,後面跟著搜索文本和替換文本:
?
1
This is an example document.
s/document/file/
1
This is an example file.
如果你要編輯其他行,步驟也是一樣的,只需提供一個不同的行號即可:
?
3
There is some errors, but not much.
s/is/are/
s/much/many/
你可以使用 ,p
命令來看到你對緩衝區的歷史編輯記錄:
This is an example file.
There is some text, but not much.
There are some errors, but not many.
當然,這些修改只存在於緩衝區里。你如果在 ed
編輯器外查看這個文件,你只會看到原始的文本:
$ cat myfile.txt
This is an example document.
There is some text, but not much.
There is some errors, but not much.
如果你要把這些修改保存迴文件中,使用 w
命令即可:
w myfile.txt
258
清空緩衝區
如果想要得到一個新的緩衝區,以此來打開一個新的文件,或者把一個新的文件載入到不同的環境中,你可以使用 c
命令。使用這個清空緩衝區後,什麼也不會輸出,因為緩衝已經是空的了:
c
,p
退出
如果要退出當前的 ed
會話,你可以使用 q
命令。它並不會給你一個保存緩衝區的機會,所以你要確保自己在這之前執行了保存操作。
嘗試一下 ed 吧
ed
還可以做到很多事情,學習 ed
可以讓你知道它和部分的 vim
是如何工作的。我並沒有嘗試使用 ed
來寫這篇文章,老實說,我也不認為它是通常意義上的最佳文本編輯器。但是,ed
仍然是一個出色的編輯器。通過閱讀它的文檔,你可以很輕鬆地學會它。在 GNU 系統上,你可以使用 info ed
來查看它的操作手冊。
via: https://opensource.com/article/20/12/gnu-ed
作者:Seth Kenlon 選題:lujun9972 譯者:lkxed 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive