本页使用了标题或全文手工转换

ed (文本编辑器)

维基百科,自由的百科全书
跳到导航 跳到搜索

ed
ed文本编辑器
ed文本编辑器
原作者 Ken Thompson
開發者 AT&T贝尔实验室
初始版本 1973年, 45–46年前
操作系统 Unix类Unix
类型 文本编辑器
网站 www.gnu.org/software/ed/ed.html 編輯維基數據鏈接

ed是用于Unix类Unix操作系统的行编辑器。它是Unix操作系统在1969年8月开发出来的最初部分[1]。它仍旧是POSIXOpen Group的基于Unix的操作系统标准的一部分[2],与更加完备的全屏幕编辑器vi并列。

历史和影响[编辑]

ed文本编辑器是Unix操作系统最初的三个要件之一:汇编器编辑器shell,它们是Ken Thompson在1969年8月于AT&T贝尔实验室PDP-7上开发的[3]。ed的很多特征来自qed文本编辑器,它是Thompson的母校加州大学伯克利分校开发的[4] 。Thompson非常熟悉qed,曾经在CTSSMultics系统上重新实现过它。Thompson版本的qed曾因首先实现了正则表达式而著名。正则表达式也实现于ed中,尽管相比qed中的这里实现的要相当不具一般性。

Dennis M. Ritchie生产了后来Doug McIlroy所描述的“终极”ed[5],ed的各方面转而影响了ex,它依次又产生了vi。非交互式Unix命令grep受到qed和后来的ed常见特定用法的启发,它们的命令g/re/p含义是全局查找正则表达式re并打印包含它的行。Unix流式编辑器sed实现了未被Unix上的ed所支持的qed的很多脚本特征。

特征[编辑]

ed的特征包括:

  • 在所有Unix系统上必然可获得,在符合单一UNIX规范的系统上是强制的。
  • 模态编辑器,支持命令模式、文本模式和查看模式。
  • 支持正则表达式
  • 通过从标准输入获取命令而达成的强力自动化。

著称于它的简洁性,ed几乎不给予视觉反馈[6],故而曾被(Peter H. Salus)称为“曾有过的最仇视用户的编辑器”,即使是比较于同时代的(因复杂而声名狼藉的)TECO。例如,在有错误的情况,或它想要确认用户希望不保存退出的时候,ed产生的消息就是“?”。它不报告当前文件名或行号,甚至不显示变更文本的结果,除非发出要求。更老版本(大约1981年)在发起退出命令而用户没有保存变更的时候甚至不提示确认[6]。这种简洁性对Unix的早期版本是适当的,那时控制台是电传打字机调制解调器很慢,而内存是珍贵的。计算机技术进步使得这些限制解除了,有更多视觉反馈的编辑器成为常规。

在当前实践中,ed极少交互式使用,但却在一些shell脚本中有所使用。对于交互式使用,ed于1980年代被samviEmacs编辑器取代。ed事实上可以在所有可获得的Unix和Linux版本上找到,因此对必须在多个版本Unix上工作的人有用。在基于Unix的操作系统上,一些实用工具如SQL Plus运行ed作为编辑器,如果EDITOR和VISUAL环境变量没有定义的话[7]。如果在故障的情况下,ed有时是唯一可获得的编辑器。这几乎是它交互式使用的唯一时刻。

ed命令在其他基于行的编辑器中经常被模仿。例如,在早期版本的MS-DOS32-bit版本的Windows NT中,EDLIN有某种程度上类似的语法,在很多MUDLPMud和后代)中的文本编辑器使用类似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. 
  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) (Technical report). CSTR. Bell Labs. 1987. 139. 
  6. 6.0 6.1 Donald A. Norman. The truth about UNIX (PDF). Datamation. 1981. 
  7. Administering SQL*Plus. https://docs.oracle.com/cd/E11882_01/server.112/e10839/admn_sqlpls.htm#UNXAR166 Accessed 7/23/2016.

外部链接[编辑]