ed (文本編輯器)
原作者 | Ken Thompson |
---|---|
開發者 | AT&T貝爾實驗室 |
首次發佈 | 1973年, 50–51年前 |
作業系統 | Unix和類Unix |
類型 | 文字編輯器 |
ed(editor)是用於Unix和類Unix作業系統的行編輯器。它是Unix作業系統在1969年8月開發出來的最初部分[1]。它仍舊是POSIX和Open Group的基於Unix的作業系統標準的一部分[2],與更加完備的全螢幕幕編輯器vi並列。
歷史和影響
[編輯]ed文字編輯器是Unix作業系統最初的三個要件之一:組譯器、編輯器和shell,它們是肯·湯普遜在1969年8月於AT&T貝爾實驗室在PDP-7上開發的[3]。ed的很多特徵來自qed文字編輯器,它是湯普遜的母校加州大學伯克利分校開發的[4] 。湯普遜非常熟悉qed,曾經在CTSS和Multics系統上重新實現過它。湯普遜版本的qed曾因首先實現了正則表達式而著名。正則表達式也實現於ed中,儘管相比qed中的這裏實現的要相當不具一般性。
丹尼斯·里奇生產了後來道格拉斯·麥克羅伊所描述的「終極」ed[5],ed的各方面轉而影響了ex,它依次又產生了vi。非互動式Unix命令grep受到qed和後來的ed常見特定用法的啟發,它們的命令g/re/p含義是全域尋找正則表達式re並列印包含它的行。Unix串流編輯器sed實現了未被Unix上的ed所支援的qed的很多指令碼特徵。
特徵
[編輯]ed的特徵包括:
著稱於它的簡潔性,ed幾乎不給予視覺反饋[6],故而曾被Peter H. Salus稱為「曾有過的最仇視用戶的編輯器」,即使是比較於同時代的(因複雜而聲名狼藉的)TECO。例如,在有錯誤的情況,或它想要確認用戶希望不儲存退出的時候,ed產生的訊息就是「?」。它不報告當前檔名或行號,甚至不顯示變更文字的結果,除非發出要求。更老版本(大約1981年)在發起退出命令而用戶沒有儲存變更的時候甚至不提示確認[6]。這種簡潔性對Unix的早期版本是適當的,那時控制台是電傳打字機,數據機很慢,而主記憶體是珍貴的。電腦技術進步使得這些限制解除了,有更多視覺反饋的編輯器成為常規。
在當前實踐中,ed極少互動式使用,但卻在一些shell指令碼中有所使用。對於互動式使用,ed於1980年代被sam、vi和Emacs編輯器取代。ed事實上可以在所有可獲得的Unix和Linux版本上找到,因此對必須在多個版本Unix上工作的人有用。在基於Unix的作業系統上,一些實用工具如SQL Plus執行ed作為編輯器,如果EDITOR和VISUAL環境變數沒有定義的話[7]。如果在故障的情況下,ed有時是唯一可獲得的編輯器。這幾乎是它互動式使用的唯一時刻。
ed命令在其他基於行的編輯器中經常被模仿。例如,在早期版本的MS-DOS和32-bit版本的Windows NT中,EDLIN有某種程度上類似的語法,在很多MUD(LPMud和後代)中的文字編輯器使用類似ed的語法。但是這些編輯器典型的在功能上更加有限。
例子
[編輯]下面是一個ed對談的例子抄錄。為了清晰,命令和用戶鍵入的文字使用正常字型,而來自ed的輸出被加粗。
a ed is the standard Unix text editor. This is line number two. . 2i . ,l ed is the standard Unix text editor.$ $ This is line number two.$ 3s/two/three/ ,l ed is the standard Unix text editor.$ $ This is line number three.$ w text 65 q
最後結果是包含下列文字的一個簡單文字檔案:
ed is the standard Unix text editor. This is line number three.
開始於一個空檔案,a
命令附加文字,所有ed命令都是單一字母。這個命令安置ed進入「插入模式」,插入隨後的字元,並由只有一個單一的點的行終止。在此點終止前鍵入的兩行進入檔案緩衝區。2i
命令也進入插入模式,並在第2行之前插入鍵入的文字,這裏是空行。所有命令都可以字首一個行號來在此行上進行操作。
在行,l
中,l表示列表命令。這個命令字首着一個範圍,這裏是,
,它是1,$
的簡寫。範圍是由逗號分隔的兩個行號,$
意味着最後一行。作為回應,ed列出所有行,從最先至最後。這些行用美元號終結,所以在行尾的空白明顯可見。
一旦空行被插入到第2行前,讀作「This is line number two」的行,現在實際上是第3行。這個錯誤使用3s/two/three/
命令來更正,這是替換命令。3
指定應用這個命令的那個行;隨後是要被替換的文字,接着是要替代成的文字。現在用,l
命令列出的行是正確的了。
w text
命令寫緩衝區到檔案「text」,使得ed用「65」來響應,這是寫到檔案中的字元數目。q
命令結束ed對談。
參見
[編輯]- ex (文字編輯器),最初是擴充版本的ed。
- vi,基於ex的可視全螢幕幕編輯器.
- sed,基於ed內指令碼特徵的標準UNIX串流編輯器。
- Edlin,受ed影響的標準MS-DOS行編輯器。
- Sam (文字編輯器)
- 編輯器之戰
- Unix實用程式列表
參照
[編輯]- ^ Salus, Peter H. The Daemon, the Gnu and the Penguin. Groklaw. 2005 [2019-06-02]. (原始內容存檔於2017-07-04).
- ^ 單一UNIX®規範第7期,由國際開放標準組織發佈 – 命令與工具(Commands & Utilities)參考,
- ^ The Peter H. Salus, Daemon, the Gnu and the Penguin. Ch. 2 & 3. Thursday, April 14, 2005 @ 10:56 PM EDT. http://www.groklaw.net/article.php?story=20050414215646742 (頁面存檔備份,存於互聯網檔案館) Accessed 10/29/2015.
- ^ D. M. Ritchie and K. L. Thompson, "QED Text Editor", MM-70-1373-3 (June 1970), reprinted as "QED Text Editor Reference Manual", MHCC-004, Murray Hill Computing, Bell Laboratories (October 1972).
- ^ McIlroy, M. D. A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (技術報告). CSTR. Bell Labs. 1987 [2019-06-02]. 139. (原始內容存檔 (PDF)於2019-11-30).
- ^ 6.0 6.1 Donald A. Norman. The truth about UNIX (PDF). Datamation. 1981 [2019-06-02]. (原始內容存檔 (PDF)於2014-04-16).
- ^ Administering SQL*Plus. https://docs.oracle.com/cd/E11882_01/server.112/e10839/admn_sqlpls.htm#UNXAR166 (頁面存檔備份,存於互聯網檔案館) Accessed 7/23/2016.
外部連結
[編輯]- 單一UNIX®規範第7期,由國際開放標準組織發佈 : edit text – 命令與工具(Commands & Utilities)參考,
- 描述ed的Unix第一版手冊頁(頁面存檔備份,存於互聯網檔案館)。
- GNU ed homepage(頁面存檔備份,存於互聯網檔案館)。
- Version 7 Unix Programmer's Manual : text editor –
- Plan 9通用命令(General Commands)手冊頁,最初ed的直接後代。 : text editor –
- Win32版本GNU ed(頁面存檔備份,存於互聯網檔案館)
- Unix Editors I
- ed用於指令碼的例子(頁面存檔備份,存於互聯網檔案館)
- ed 幽默("Ed是標準文字編輯器")(頁面存檔備份,存於互聯網檔案館)
- 在Berkeley之前的UNIX歷史(頁面存檔備份,存於互聯網檔案館)章節3.1描述了ed的歷史。