每天学习一个命令:ed 行编辑器

2018-02-06 09:43:51来源:http://einverne.github.io/post/2018/02/ed-line-editor.html作者:Verne in GitHub人点击

分享


ed
是一个面向行的文本编辑器。ed
命令还有一个严格的red
命令,red
命令只能编辑当前目录中的文件,并且不能够执行shell命令。



当使用ed
命令明确指定一个文件时,文件的一份拷贝被读入编辑器的缓存,所有的编辑都是保存在缓存中,而不是直接在文件中修改。如果退出ed
却没有显示的使用w
命令来保存修改的话,所有的修改内容都会丢失。



编辑的内容可以通过两种不同的方式:command
和input
两种模式。使用第一种命令模式时,ed
命令通过从标准输入读取命令并将修改执行在编辑器缓存中。一个典型的命令


,s/old/new/g

这一行命令会将文本中所有的 old 字符串替换为 new,这和vim中有些相似。



当使用命令输入比如,a
(append),i
(insert),c
(change) 时,ed
编辑器会进入input
模式,这意味着给文件添加内容。在这个模式中所有命令都不再支持,相反的,所有的输入都会被写到缓冲中。input
模式将在输入.
时自动结束并退出。



ed
编辑器的命令针对的是整行,或者数行,比如,d
命令意味着删除行,m
命令意味着移动行。如果要修改某一行中的内容,唯一的方法就是使用替换,就和上面的例子中类似。例子中的s
命令也是针对的整行。



通常来说,ed
编辑器包含0或者多行行序号,通常后面跟随着命令及参数,他的基本结构如下:


[address [,address]] command [parameters]

address 通常包含一行或者多行


Line Address

可以使用下面的方式来表示行序号,以下所有的行序号都是 buffer 缓冲中行序号:



Tag
Description


.
buffer 中 当前行

$
最后一行

n

第 n 行,行的范围是[0,$]


-
or^
前一行

-n
or^n
前 n 行

+
or+n
后一行及后n行

,
or%

全部行,等同于1,$


;

当前行到最后一行.,$


/re/
下一个包含正则 re 的行

?re?
上一个包含正则 re 的行

Commands


所有的ed
命令都是单个字符,一些需要其他额外的参数。如果命令跨越了多行,每一行都需要/
来结尾。p
(print),l
(list) 或者n
(enumerate) 打印。如果输入了ed
不认识的命令,ed
会打印一个?
作为错误消息。



Command
Description

(.)a
添加到行

(.,.)c
改变行

(.,.)d
删除行

(.)i
添加到行首

还有很多命令可以参考下面的链接。


通常情况下,输入数字开始的行号,可以直接跳转到该行。


脚本


ed
的一个更有趣的特征是脚本化编辑工作的能力,将编辑命令放到独立的文件中并将它们作为行编辑器的输入:


ed filename < ed_script

这个特征使得 ed 成为了可编程的编辑器,也就是说,可以脚本化任何手动执行的操作。


sed 是作为特殊目的的编辑器而创建,专门执行脚本,与 ed 不同,不能交互使用。 sed 与 ed 的主要区别在于它是面向字符流的。默认情况下 sed 的所有输入都会经过处理并且转为标准输出。输入文件本身并不发生改变。如果想要改变输入文件,一般使用 shell 的重定向。ed 不是面向字符流的,并且文件本身会发生改变,ed 脚本必须包含保存文件并且退出编辑器,不能输出到屏幕。


awk 是作为可编程的编辑器而开发的,同 sed 一样,面向字符流,并且解释编辑命令的脚本。awk 与 sed 不同的是它废弃了行编辑器的命令集,提供了仿效 C 语言的程序设计语言,例如使用 print 语句代替了p 命令,但延续了 寻址的概念


/regular/ { print }


用来打印匹配regular
的行。脚本张使用程序语言的优点是提供了控制编程的语句,包括表达式,条件判断,循环等等结构。


reference
http://www.tutorialspoint.com/unix_commands/ed.htm

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台