曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4192|回复: 0
打印 上一主题 下一主题

ed -- 简易文本编辑器

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-6-3 16:37:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 启动编辑器

如果新编辑一个文件,那么直接输入命令 ed 即可;如果编辑一个已存在的文件,那么可以直接在 ed 后加上要编辑的文件名,如:
$ ed temp.txt

在启动后,进入编辑界面,这时还不能直接输入要录入的内容,比如直接输入 hello world 然后回车,那么会看到有一个 "?" 号返回:
beyes@debian:~/command/diff/gnudiff$ ed temp.txt
0
hello world
?
上面的数字 "0" 表示从第 0 行开始录入。
"?" 表示未知命令。ed 和 vi/vim 一样,需要先输入一些子命令后才能进行文本录入,下面是几个常用的子命令:

a :在文件的末尾添加新内容。
如果要录入的文件中已有内容,那么使用 a 命令就会将新录入的内容添加到文件的末尾。

. :点命令表示退回到命令模式,它相当于 vi 中的 ESC 键。

w : w 命令表示将缓冲区的数据写入文件保存。

q :q 命令表示退出 ed 编辑器。

接上面,我们录入一行 hello world :
$ ed temp.txt
0
hello world
?
a
hello world
.
w
12
q
$ cat temp.txt
hello world
经过上面的几个基本命令实现了文本的基本录入。

有了这个基础,再看下面的子命令
i : i 命令在文件的最后一行之前插入新内容。
我们接着编辑上面的 temp.txt 文件,这个文件中已经有了一行 hello world 的内容:
$ ed temp.txt
12
i
hello ed
.
w
21
q
$ cat temp.txt
hello ed
hello world
从输出看到,i 命令录入的 "hello ed" 这一行内容已经添加到了 "hello world" 的前面。

现在已经录入了两行了,这时可以在命令模式下输入数字查看相应的行了,如:
$ ed temp.txt
21
1
hello ed
2
hello world
3
?
通过输入 1, 2 查看到刚才录入的两行内容。再输入 3 时,因为文本已经没有内容,所以返回 "?" 表示不知道要干什么。

为了更好试验,我们多录入几行内容:
$ cat temp.txt
hello ed
hello world
are you ok
welcome to groad.net
linux is fun
像上面所说,在命令模式下,输入数字可以列出相应行的内容。如果我们想显示全部的内容,可以使用以下命令:
$ ed temp.txt
66
1,$p
hello ed
hello world
are you ok
welcome to groad.net
linux is fun
这里使用 1,$p 打印出了文本中的所有行。这里 "$" 表示最后一行,而 "p" 子命令表示打印。

ed 也可以像 vi 里的 set nu 命令一样给每一行添加一个行号,比如可以如下运行命令给每行添加行号并打印出来,这个方法使用的是 "n" 子命令:
1,$n
1    hello ed
2    hello world
3    are you ok
4    welcome to groad.net
5    linux is fun

ed 还有许多有用的操作,这里不一 一演示,下面从网上摘抄一段基本应用操作列表:
1,$n             打印文件内容,并加行号信息
n                到第n行(n为数字)
n                显示当前行的内容(n为字符)
d                删除该行
/xx/             查找xx
?xx?             反向查找xx
//               查找下一个
s/str1/str2/     当前行中替换str1为str2
ns/str1/str2/    在第n行中替换str1为str2
a,c,i            在当前行操作(a:在行后添加  c:修改行内容 i:在行前插入)
命令参数:
ed file
出错时,h提供简单帮助信息,H提供详细帮助信息,用a,c,I进入输入方式,在单独一行上用,回到命令格式保存文件w.   Wq =x
p  .p 显示当前行
=  显示当前行的行号
np  显示第n 行
1,6p  显示1-6行
$p   显示最后一行
1,$p显示所有行
+  显示下一行
- 显示上一行
n  显示当前行及行号
nn  显示第n行及行号
x,yn  显示x—y行及行号
l   显示当前行包括非打印字符
d   删除当前行
u   取消最后命令
s /str1/str2   用 str2 取代str1
s/str1//    删除str1
2s/str1/str2/n   第2 行的str1改为str2并显示修改后的行
s/str1/str2/g   全程替换
<first>,<end>m<line>
2,4m6    第2—4行移到第6行之后
t 块拷贝格式同m
r file  将文件读到当前行后
<first>,<end> w file   写块到文件
!cmd   执行shell命令
/模式/   正向查找命令
?模式?反向查找命令
//  继续找第2个
g/the/p   全程查找并显示
g/the/s/the/that/   全程查找the并用that代替the
v与g命令相反
v/the/n   全程查找不包含the 并显示
无字符
^代表行首   $行尾    .任意字符   *任意多个与前面相同字符
/A….B/   以A开关B结尾中间3个任意
. s/. /.     第1个 . 当前行
         第2 个 . 任意字符
         第3个 . 字符
s/xx*/y/   用y代替2个或2个以上的x
s/x*y/y/   用y代替以x开头以y结束的所有字符
&代表第1个模式内容
/模式1/(模式1)/=/模式1/(&)/
[xz]表示x或z
[0-9]表示0-9的任意数字
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 23:03 , Processed in 0.076173 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表