ed (文本编辑器)
ed(editor)是用于Unix和类Unix操作系统的行编辑器。它是Unix操作系统在1969年8月开发出来的最初部分[1]。它仍旧是POSIX和Open Group的基于Unix的操作系统标准的一部分[2],与更加完备的全屏幕编辑器vi并列。
原作者 | Ken Thompson |
---|---|
開發者 | AT&T贝尔实验室 |
首次发布 | 1973年, 50–51年前 |
操作系统 | Unix和类Unix |
类型 | 文本编辑器 |
历史和影响
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的历史。