ed(red)编辑器

http://hi.baidu.com/linuxtrip/item/4b52205f5a5da74c4fff2005

一、什么是ed

1、ed是又称为" red " ,它是一种文本编辑器,是对输入文件的内容按行进行编辑,所以它是行编辑器

2、ed的工作环境:不仅可以在bash中使用ed指令,也可以在脚本文件中使用ed指令(通常ed指令用于脚本中)

3、ed的工作流程:它将整个文件的内容读入自己的缓冲区,对该副本执行指定的操作,并可选地将缓冲区写到磁盘

二、ed指令语法简介

1、ed指令该如何使用呢?ed指令有自己的Format,如下:

[address]     [command]     [suffix]
[地址]         [命令]               [后缀]

(1)address:指定要处理ed缓冲区的一行或多行(缺省为当前行,即:缓冲区中内容的最后一行),并且可以通过多种方式进行指定
(2)command :它是以 " 单字符 " 方式存在,表示是要对ed缓冲区中所指定的行执行操作,命令中可以使用匹配模式,而匹配模式(pattern)中可以使用BERs(基本正则表达式)
(3)suffix:后缀

注意两点:
(1)对于脚本中的特别单命令行程序,可使用 echo 将一组命令和文本管道传输给ed指令,从而以非交互式的方式使用它
(2)也可以把Format写到一个文件中,每一行一个Format,然后使用 “<" 符号将文件中的所有Format导出给 ed指令,让ed指令执行这些Format

2、详细介绍ed指令的Format
ed指令的Format有三段:[address]、[command]、[suffix]

1)[address]:该段是地址字段,作用是用来告诉ed指令要处理缓冲区的哪些行,即:对行询址

.

对缓冲区中的当前行寻址(缺省地址)

0

对缓冲区中的开头(第一行之前)寻址

1

对缓冲区中的第一行寻址

n

对缓冲区中的第n行寻址

$

对缓冲区中的最后一行寻址

-n

对缓冲区中的当前行之前的第n行寻址,如果没有n,则减号对紧跟在当前行之前的行寻址

+n

对缓冲区中的当前行之后的第n行寻址,如果没有n,则加号对紧跟在当前行之后的行寻址

,

对第一至最后一行寻址,包括第一行和最后一行
注意:与1,$相同;与%相同

对当前行至最后一行寻址

/pattern/

从当前行开始向下进行检查,对下一个包含与 pattern 匹配的文本的行寻址
(注意:pattern可以使用BREs)

?pattern?

从当前行开始向上进行检查,对上一个包含与 pattern 匹配的文本的行寻址
(注意:pattern可以使用BREs)


2)[command]:该段是命令字段,作用是用来告诉ed指令要执行哪些命令

a

该命令在指定的地址之后追加文本

c

该命令将指定的地址更改为给定的文本

d

该命令删除指定地址处的行

i

该命令在指定的地址之前插入文本

j

该命令将指定的多行进行合并成一行

p

该命令是输出所指定地址的行的内容

n

该命令是输出所指定地址的行的内容,同时为这些内容的每行开头带上编号(从1开始)

m

该命令将移动指定的地址处的行到另一个指定的地址处
(例如:$,将第一行移动到最后一行的下一行)

t

该命令将复制指定的地址处的行,将粘贴到另一个指定的地址处
(例如:2t$,将第二行进行复制,然后粘贴到最后一行的下一行)

=

该命令显示指定地址的行的编号
(例如:.=则显示当前行的编号;$=则显示最后一行的编号)

q

该命令在将缓冲区保存到磁盘后终止程序并退出

r file

该命令将读取filespec 的内容并将其插入指定的地址之后

s/pattern/replacement

该命令将匹配 pattern 的文本替换为指定地址中的 replacement 文本

w  file

该命令将指定的地址写到file文件;如果没有给出address,则此命令缺省使用整个缓冲区;如果没有给出file文件;则此命令表示写到本文件

e   file

该命令将文件file中的内容被读入ed缓冲区(注意:原来ed缓冲区的内容将被覆盖)

e   !指令

该命令将执行一条指令(例如:ls /root)的输出结果被读入ed缓冲区
(注意:原来ed缓冲区的内容也被覆盖)

g/pattern/command-list

该命令对匹配pattern的所有行执行command-list命令列表中的命令(g:表示全局命令)

注意:上表中的pattern可以使用Regular Expression(BREs)------请查看正则表达式的那篇文章

3)[suffix]:即“ 后缀 “,该段是用来加强命令的执行,主要的后缀如下

改变一行的第一个出现

n

它是一个标志,即:改变一行上的每个出现,而不仅仅是一行的第一个出现,改变时需要用户确认

g

它是一个标志,即:改变一行上的每个出现,而不仅仅一行的第一个出现,改变时不用用户确认


注意:'g'的含义不同。开始处的'g'是全局命令,意味着对所有与地址匹配的行进行改变。结尾处的'g'是一个标志,意味着改变一行上的每个出现,不只是第一个

三、实例讲解

1、bash命令解析器中:ed指令的交互式操作方式


注意:图中 "$a":表示在ed缓存内容的最后面追加文字 “ This is eleven OK “,接下来一行的“ . "表示输入结束,再接下来的wq表示保存退出ed


2、bash命令解析器中:ed指令的非交互式操作方式(使用echo指令与ed指令的混合)

1)在文件file内容的开头前增加一行,内容为:“How are you today?“

注意:上图中的"(command1;command2;...)"作用:将括号中的命令放在新的shell中运行,而不是放在当前登录的shell中运行!

2)在匹配的行的前一行插入一行,内容为:i like computer
方法一:使用echo指令与ed指令

方法二:使用" << "操作符


3)删除匹配的行到最后一行之间的内容


注意:使用第二种方法时,要在" $ "符号前加上backslash,屏蔽它的引申义(bash对其的解析)

4)删除文件中各行的尾随空格



5)删除文件中含有 "标点符号" 或者 "控制符号" 的行

注意:g命令:它是一个全局命令,全局命令会使匹配正则表达式的所有行成为特定命令的对象

6)将文件中所有匹配正则表达式的行进行某个字符串的替换


注意:开始处的'g'是全局命令,意味着对所有与地址匹配的行进行改变。结尾处的'g'是一个标志,意味着改变一行上的每个出现,不只是第一个

7)区分g命令与g标志

(1)不使用g命令,也不使用g标志

(2)不使用g命令,但使用g标志

(3)使用g命令,但不使用g标志

(1)使用g命令,也使用g标志


8)显示文件中所有匹配到的行




3、ed脚本化操作
方法:将命令写入一个文件(例如:script),一行写一个命令(命令之间最好不要有空行),最后使用 "<" 重定向给ed指令执行这些命令

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值