ed (文本編輯器)

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

ed
ed文本編輯器
ed文本編輯器
原作者Ken Thompson
開發者AT&T貝爾實驗室
首次發布1973年, 50–51年前
操作系統Unix類Unix
類型文本編輯器

ededitor)是用於Unix類Unix操作系統的行編輯器。它是Unix操作系統在1969年8月開發出來的最初部分[1]。它仍舊是POSIXOpen Group的基於Unix的操作系統標準的一部分[2],與更加完備的全屏幕編輯器vi並列。

歷史和影響[編輯]

ed文本編輯器是Unix操作系統最初的三個要件之一:匯編器編輯器shell,它們是肯·湯普遜在1969年8月於AT&T貝爾實驗室PDP-7上開發的[3]。ed的很多特徵來自qed英語QED_(text_editor)文本編輯器,它是湯普遜的母校加州大學伯克利分校開發的[4] 。湯普遜非常熟悉qed,曾經在CTSSMultics系統上重新實現過它。湯普遜版本的qed曾因首先實現了正則表達式而著名。正則表達式也實現於ed中,儘管相比qed中的這裡實現的要相當不具一般性。

丹尼斯·里奇生產了後來道格拉斯·麥克羅伊所描述的「終極」ed[5],ed的各方面轉而影響了ex,它依次又產生了vi。非交互式Unix命令grep受到qed和後來的ed常見特定用法的啟發,它們的命令g/re/p含義是全局查找正則表達式re並打印包含它的行。Unix流式編輯器sed實現了未被Unix上的ed所支持的qed英語QED (text editor)的很多腳本特徵。

特徵[編輯]

ed的特徵包括:

  • 在所有Unix系統上必然可獲得,在符合單一UNIX規範的系統上是強制的。
  • 模態編輯器,支持命令模式、文本模式和查看模式。
  • 支持正則表達式
  • 通過從標準輸入獲取命令而達成的強力自動化。

著稱於它的簡潔性,ed幾乎不給予視覺反饋[6],故而曾被Peter H. Salus英語Peter H. Salus稱為「曾有過的最仇視用戶的編輯器」,即使是比較於同時代的(因複雜而聲名狼藉的)TECO英語TECO (text editor)。例如,在有錯誤的情況,或它想要確認用戶希望不保存退出的時候,ed產生的消息就是「?」。它不報告當前文件名或行號,甚至不顯示變更文本的結果,除非發出要求。更老版本(大約1981年)在發起退出命令而用戶沒有保存變更的時候甚至不提示確認[6]。這種簡潔性對Unix的早期版本是適當的,那時控制台是電傳打字機調製解調器很慢,而內存是珍貴的。計算機技術進步使得這些限制解除了,有更多視覺反饋的編輯器成為常規。

在當前實踐中,ed極少交互式使用,但卻在一些shell腳本中有所使用。對於交互式使用,ed於1980年代被sam英語Sam_(text_editor)viEmacs編輯器取代。ed事實上可以在所有可獲得的Unix和Linux版本上找到,因此對必須在多個版本Unix上工作的人有用。在基於Unix的操作系統上,一些實用工具如SQL Plus英語SQL Plus運行ed作為編輯器,如果EDITOR和VISUAL環境變量沒有定義的話[7]。如果在故障的情況下,ed有時是唯一可獲得的編輯器。這幾乎是它交互式使用的唯一時刻。

ed命令在其他基於行的編輯器中經常被模仿。例如,在早期版本的MS-DOS32-bit版本的Windows NT中,EDLIN英語edlin有某種程度上類似的語法,在很多MUDLPMud英語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會話。

參見[編輯]

引用[編輯]

  1. ^ Salus, Peter H. The Daemon, the Gnu and the Penguin. Groklaw. 2005 [2019-06-02]. (原始內容存檔於2017-07-04). 
  2. ^ ed – 命令與工具(Commands & Utilities)參考,單一UNIX®規範第7期,由國際開放標準組織發布
  3. ^ 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.
  4. ^ 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).
  5. ^ 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. ^ 6.0 6.1 Donald A. Norman. The truth about UNIX (PDF). Datamation. 1981 [2019-06-02]. (原始內容存檔 (PDF)於2014-04-16). 
  7. ^ Administering SQL*Plus. https://docs.oracle.com/cd/E11882_01/server.112/e10839/admn_sqlpls.htm#UNXAR166頁面存檔備份,存於網際網路檔案館) Accessed 7/23/2016.

外部連結[編輯]