|
1. 启动编辑器
如果新编辑一个文件,那么直接输入命令 ed 即可;如果编辑一个已存在的文件,那么可以直接在 ed 后加上要编辑的文件名,如:
在启动后,进入编辑界面,这时还不能直接输入要录入的内容,比如直接输入 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的任意数字 |
|