本节书摘来自异步社区《Linux指令从入门到精通》一书中的第4章,第4.2节,作者:宋磊 , 宋馥莉 , 雷文利著,更多章节内容可以访问云栖社区“异步社区”公众号查看
4.2 Linux下的简单文字模式文本编辑器
Linux下的文本编辑器种类很多,功能的复杂程度和操作的难易度也不尽相同。在此我们将其大致分为可视和不可视两种。在本节中讲解的ed,jed,joe,pico和sed都属于不可视编辑器,不能进行全屏方式下的操作,操作相对简单。但可视编辑器的交互功能更好,典型的可视编辑器有vi和emacs,这将在下一节中讲述。
4.2.1 ed指令:简单的行文本编辑器
理解行编辑的概念,掌握ed指令进行简单的行文本编辑的方法
ed [参数] [文件名]
ed指令是Linux下一个功能简单的行文本编辑器,属于不可视编辑器,用户无法查看全部的文档内容,但可以在命令行模式下查看最后一行的内容。ed文本编辑器有命令行模式和输入模式两种工作模式,当第一次在命令行中输入ed指令,启动ed行文本编辑器,同时进入命令行模式。此时用户可通过ed编辑器的内建指令来进行模式的切换以及文本的编辑。ed指令一次仅能完成一行文本的编辑,当用户要建立一个简单的小文件以及进行Shell脚本编辑时,使用该指令还是很方便的。
参数及其说明如下:
命令模式下常用命令说明如下:
ed编辑器行寻址命令说明如下:
范例411 启动ed文本编辑。
在命令行中直接输入ed指令将启动命令行编辑器,用户可以在其环境下进行编辑,或直接输入w 文件名,新建一个文本文档。
[root@localhost ~]# ed //启动ed文本编辑
用户也可以在ed指令中直接指定要打开的文件,如果文件名不存在,将显示提示符“Newfile :No Such file or dirctory”,用户可以编辑新文本文档。
[root@localhost ~]# ed newfile //启动ed文本编辑
Newfile :No Such file or dirctory
如果指定的文件存在,在ed编辑器中将显示文件的大小,空文本文件将显示为0。
[root@localhost ~]# ed newfile //启动ed文本编辑
0
范例412 ed文本编辑器的模式切换以及文本编辑。
在ed编辑器中,用户可以通过输入内建指令a,c,i,从命令行模式切换到输入模式,同时选择文本的编辑方式。从输入模式返回到命令行模式只需输入“.”,同时按下“Enter”键即可。
a命令(末行输入):启动ed文本编辑,切换到输入模式,编辑文本。
[root@localhost ~]# ed newfile //启动ed文本编辑
0
a //切换到输入模式,将新输入内容加在最后一行的后面
i am a student
i am come from china
i命令(插入一行):在ed编辑器中,要进行输入模式下的不同输入方式之间的切换时,必须先切换到命令行状态。
. //切换到命令行模式
i //切换到输入模式,将新输入内容插入最后一行内容的前面
i don’t have the ability to say no.
c命令(替换):将文档的最后一行替换为新输入的内容
. //切换到命令行模式
c //切换到输入模式,将新输入内容替换最后一行的内容
there is the end of the file.
存盘并退出ed编辑器。
.
w //保存文件
74
q //退出ed
[root@localhost ~]# cat newfile
i am a student
i don’t have the ability to say no.
there is the end of the file.
[root@localhost ~]#
范例413 ed文本编辑器的指定行寻址。在ed编辑器的命令行模式下输入“0a”,在进行模式切换时,对指定行进行寻址。“0”表示的是第一行之前的位置,使用该命令就可以在指定文档的开头进行编辑。
[root@localhost ~]# ed newfile //启动ed文本编辑
74
0a //切换到输入模式,在指定的位置输入内容
There is the beginning of the file.
.
Wq //保存并退出
105
[root@localhost ~]# cat newfile
There is the beginning of the file.
i am a student
i don’t have the ability to say no.
there is the end of the file.
[root@localhost ~]#
范例414 使用ed文本编辑器进行快速文本编辑。因为ed文本编辑器每次只能对一行进行文本编辑,如果用户有多行需要编辑,一次输入一行就显得比较麻烦。而使用echo指令通过管道将其输出作为ed指令的输入,就能同时对多行文本进行编辑。
[root@localhost ~]# cat newfile //显示文本内容
There is the beginning of the file.
i am a student
i don’t have the ability to say no.
there is the end of the file.
[root@localhost ~]# (echo ‘c’;echo ‘ed is a line-oriented text editor’;echo ‘.’;echo
‘a’;echo ‘there is the end of the file.’;echo ‘.’;echo ‘wq’)|ed newfile
[root@localhost ~]# cat newfile //显示文本内容
There is the beginning of the file.
i am a student
i don’t have the ability to say no.
ed is a line-oriented text editor
there is the end of the file.
[root@localhost ~]#
4.2.2 jed:文本编辑指令
掌握使用jed进行编辑的方法
可选参数及其说明如下:
范例415 编辑指定文件can.c。
[root@localhost yy]jed -2 can.c //编辑文件can.c
执行指令“jed -2 can.c”将在屏幕上显示上下两个编辑区,对文件can.c进行编辑。
4.2.3 joe:文本编辑指令
掌握joe指令的使用方法
joe -可选参数
joe指令是一个功能强大且全面的文本编辑器。使用joe编辑器可以一次打开多个文件,每个打开的文件都有各自的编辑区,用户可以在各个文件之间进行文件的剪贴。
【joe编辑器的相关操作】
- PgUp:上一页。
- PgDown:下一页。
- Ctrl+a:将光标移到该行开始。
- Ctrl+e:将光标移到该行结尾。
- Ctrl+k+u:将光标移到文件起始处。
- Ctrl+k+v:将光标移到文件结尾处。
- Ctrl+k+h:显示帮助菜单。
- Ctrl+k+f:查找字符串。
- Ctrl+k+c:复制区块。
- Ctrl+k+y:删除区块。
- Ctrl+k+d:保存。
- Ctrl+c:关闭文件。
范例416 编辑文件。
[root@localhost yy]# joe a1 //编辑文件a1
Processing '/etc/joe/joerc'...done
Processing '/etc/joe/joerc'...done
IW a1 Row 2 Col 1 17:24 Ctrl-K H for help
Hello everybody
Hello everyone
How are you
Fine thank you and you
I fine too
Linux
Red hat Linux
Joe for red hat Linux
Joe version
[root@localhost yy]#
执行指令“joe a1”编辑文件a1。
范例417 以只读方式打开指定文件。
[root@localhost ~]# joe -rdonly a1 //以只读的方式打开文件a1
Processing '/etc/joe/joerc'...done
Processing '/etc/joe/joerc'...done
IW a1 (Read only) Row 2 Col 1 17:24 Ctrl-K H for help
Hello everybody
Hello everyone
How are you
Fine thank you and you
I fine too
Linux
Red hat Linux
Joe for red hat Linux
Joe version
[root@localhost ~]#
执行指令“joe -rdonly a1”以只读方式打开文件a1。
4.2.4 pico:文本编辑指令
掌握pico文本编辑器的使用方法
pico [-可选参数] [文件]
pico是一个纯文本编辑器,利用它可以进行文本输入、阅览、拷贝、剪贴等操作,以及文本搜索和拼写检查。如果系统中安装了pico文本编辑器,只要在Shell中输入pico指令就能启动pico编辑器。与其他编辑器相比,pico没有输入模式之分,可以直接进行文本的编辑。
【进入指令后的操作】
- Ctrl+A:该行的最前面。
- Ctrl+D:删除行。
- Ctrl+E:该行的最后面。
- Ctrl+G:帮助文档。
- Ctrl+J:重新对齐。
- Ctrl+K:删除行,放在缓冲区,类似于剪切。
- Ctrl+O:保存文件。
- Ctrl+R:插入文件。
- Ctrl+U:回到上一步。
- Ctrl+V:显示下一页。
- Ctrl+W:查找字符串。
- Ctrl+X:关闭文件。
- Ctrl+Y:页面滚动。
- Ctrl+:替换。
范例418 直接启动pico文本编辑器。
[root@localhost ~]#pico //直接输入pico回车启动pico文本编辑器
执行指令“pico”,启动pico文本编辑器。
UW PICO(tm) 4.10 New Buffer
^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text^T To Spell
执行指令“pico filename”也可启动pico文本编辑器,同时打开文件filename,在此不再赘述。在pico编辑环境的下方,列有两排最常用的操作按键,其中“^”表示的是“Ctrl”键。
范例419 在pico文本编辑环境下显示帮助信息。
UW PICO(tm) 4.10 New Buffer
Pico is designed to be a simple,easy-to-use text editor with a layout very similar to
the pine mailer.The status line at the top of the display show pico’s version,the cur-
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
^G (F1) Display this help text
^F move Forward a character
^B move Borward a character
^P move to the Previous line
^N move to the next line
^A move to the beginning of the current line
^E move to the End of the current line
^V (F8) move forward a page of text
^Y (F7) move backward a page of text
^X Exit help
从范例可以看出,在帮助信息中给出了pico环境下按键操作的详细说明。
4.2.5 sed:在线文本编辑指令
能使用sed指令利用script来处理文本文件
sed [-可选参数] {命令} [文本文件]
sed指令在处理文本文件的过程中是非交互的,用户可以通过将想要执行的script命令直接写到sed指令中来实现对指定文本文件的处理。由于sed指令的执行是非交互的,在一些需要强制执行的情况下,如执行一些简单的具有重复性的操作时,也是一个不错的选择。
可选参数及其说明如下:
【script命令】
- {行号}:指定文本文件中的行号。
- a{字符串}:行后追加字符串。
- d:删除行。
- i{字符串}:行前追加字符串。
- p:显示行。
- r{文本}:执行文本处理。
- s/{先前字符串}/{新字符串}/{替换方法}:使用指定的替换方法将先前字符串替换成新字符串。
范例420 利用script的替换命令来执行指定字符串的替换。
[root@localhost yy]# cat b1 //显示文件b1的信息
1 b1 1024
2 b1 1133
3 b1 0981
4 b1 1321
5 b1 1987
6 b1 1877
[root@localhost yy]# sed –e s/b1/filename/ b1 //用字符串filename替换掉文件b1中的字符b1
1 filename 1024
2 filename 1133
3 filename 0981
4 filename 1321
5 filename 1987
6 filename 1877
[root@localhost yy]# sed –e 5s/b1/filename/ b1 //用字符串filename替换掉文件b1中指定行中的字符b1
1 b1 1024
2 b1 1133
3 b1 0981
4 b1 1321
5 filename 1987
6 b1 1877
[root@localhost yy]#
执行指令“sed –e s/b1/filename/ b1”, 用指定字符串“filename”替换掉文件b1中的字符“b1”,而指令“sed –e 5s/b1/filename/ b1”的执行结果是将指定行号中的字符进行替换。
范例421 利用script命令在文件的行前和行后追加指定字符串。
[root@localhost yy]# cat b1 //显示文件b1的信息
1 b1 1024
2 b1 1133
3 b1 0981
4 b1 1321
5 b1 1987
6 b1 1877
[root@localhost yy]# sed –e i\b1 b1 //在行前追加字符串
b1
1 b1 1024
b1
2 b1 1133
b1
3 b1 0981
b1
4 b1 1321
b1
5 b1 1987
b1
6 b1 1877
[root@localhost yy]# sed –e 1i\b1 b1 //在指定的行前追加字符串
b1
1 b1 1024
2 b1 1133
3 b1 0981
4 b1 1321
5 b1 1987
6 b1 1877
[root@localhost yy]# sed –e a\b1 b1 //在行后追加字符串
1 b1 1024
b1
2 b1 1133
b1
3 b1 0981
b1
4 b1 1321
b1
5 b1 1987
b1
6 b1 1877
b1
[root@localhost yy]# sed –e 6a\b1 b1 //在指定行后追加字符串
1 b1 1024
2 b1 1133
3 b1 0981
4 b1 1321
5 b1 1987
6 b1 1877
b1
[root@localhost yy]#
在上面的范例中已讲述,通过script命令,实现在文件的所有行以及指定行前或行后追加字符串的方法。
范例422 利用script文件来执行指定字符的替换。
[root@localhost yy]# cat scpfile //显示文件scpfile的信息
2s/b1/filename/p
4s/b1/filename/p
6s/b1/filename/p
1i\b1
[root@localhost yy]# sed –n –f scpfile b1 //用script文件scpfile来执行指定字符的替换和追加
b1
1 b1 1024
2 filename 1133
3 b1 0981
4 filename 1321
5 b1 1987
6 filename 1877
[root@localhost yy]#
执行指令“sed –n –f scpfile b1”, 用指定script文件scpfile来执行指定字符的替换和指定行的追加。