AIX命令参考大全,卷 2,d - h - ed 或 red 命令

[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]

AIX命令参考大全,卷 2,d - h

ed 或 red 命令

用途

按行编辑文本。

语法

ed [ -p String] [ -s | -] [File]

red [ -pString] [ -s | -] [File]

描述

命令ed启动 ed 编辑器行编辑程序。ed 编辑器一次只能作用于一个文件,它将文件拷贝到临时的编辑缓冲区中,对该副本进行更改。ed 编辑器属于一类也包含了edit编辑器、ex编辑器和vi编辑器的编辑器族。ed 编辑器在缓冲区中做出您所指定的更改。它直到您使用 write(w)子命令时才会改变文件本身。

当您使用ed命令启动 ed 编辑器时,您可以指定您想要编辑的文件的名称,或者您可以使用e子命令。当ed命令往缓冲区中读入新的文件时,该文件的内容将替代该缓冲区以前的内容。

命令red是命令ed的受限版本,是和受限的 shell(rsh)一起使用。使用 red 命令,您就只能编辑当前目录或 /tmp 目录中驻留的文件;您不能使用 ! 子命令。

由 0 个、 1 个或 2 个地址,后接一个单字母子命令,并且再在这个子命令后接上其可选参数,这样就组成了一条 ed 编辑器的子命令。这些地址指定缓冲区内的一行或几行。因为每个子命令都有缺省地址,所以通常都不必指定地址。

ed 编辑器允许只编辑当前行,除非您指定缓冲区内的另一行。您只能移动和拷贝整行的数据。ed 编辑器对于编辑大文件或者对于在 shell 程序中进行编辑很有用。

ed 编辑器以下面的两种方式之一进行操作:

命令方式 在命令方式中,ed 编辑器识别并运行子命令。当您启动 ed 编辑器时,它处于命令方式。输入 .(句点)并按 Enter 键来确认您处于命令方式。
文本输入方式 在文本输入方式中,ed 编辑器允许您往文件缓冲区中输入文本,但是不识别子命令。请您用a 子命令、c子命令,或i子命令进入文本输入方式。通过在行的开头单独输入一个 .(句点)以退出文本输入方式并返回命令方式。要在文本输入方式下将 .(句点)放入缓冲区中,请输入一个字符,后面跟上 .(点)。然后,退出文本输入方式并使用 s 子命令除去该字符。

下面的列表提供了 ed 编辑器的最大限度。

最大行数取决于可用的内存大小。最大的文件大小取决于可用的物理数据存储量(磁盘或磁带机),或是取决于用户内存中允许驻留的最大行数。

标志

-p String 将参数 String 设为编辑器的提示符。String 的缺省值是空值(无提示符)。
-s 用子命令e、子命令r和子命令w禁止编辑器显示的字符计数。该标志还取消了 e 子命令和 q 子命令的诊断消息,并且取消了! 子命令后的!(感叹号)提示符。
- 提供和 -s 标志一样的功能。

模式匹配

ed 编辑器支持有限格式的专门的模式匹配字符,这样,您就能将这些字符用作正则表达式(RE)来构造模式字符串。您可以用地址中的这些模式指定几行,以及在某些子命令中指定行的某些部分。

正则表达式

下面的 RE 与单个字符或者整理元素相匹配,如下所示:

Character 与自身匹配,并且可以是任何的普通字符(而不是专门的模式匹配符号之一)。
. 和换行字符之外的任何单个字符匹配。
[String] 和字符串中的任何一个字符匹配。某些模式匹配字符在括弧中具有专门的意义,如下所示:
^
与除参数String中的字符和换行字符之外的任何字符相匹配,如果参数String的第一个字符是^ (音调符号) 的话。这个条件只有当 ^ 是字符串中的第一个字符, [^String] 时为真。
-
根据当前的整理序列指示某个范围的连续 ASCII 字符。例如,[a-f] 等价于 [abcdef] 或 [aAbBcCdDeEfF] 或 [abcdef]并且可以包括带着重音的 a 和 e 字符。整理序列可以给字符定义等价类。

如果减号作为字符串[-String]中的首字符;或者如果它紧跟在作为首字符的音调符号之后,[^-String];或者如果它充当字符串的最后一个字符,[String-],它就失去了其本身的意义。

]
](右括号)作为字符串的首字符,[]String],或者当它紧跟在作为首字符的音调符号之后,[^]String],它就作为该字符串的一部分而不是该字符串的终止符。

构造模式

下面的规则描述了如何从 RE 构造模式:

限制模式匹配内容

您可以限制模式,让它只匹配一行中的第一段、最后一段或者整行。空模式,//(两个斜杠),是重复上一个模式。

匹配行的第一段

参数 ^Pattern 只匹配从行的首字符位置开始的字符串。

匹配行的最后一段

参数Pattern$ 只匹配以行的最后一个字符(不包括换行字符)为结尾的字符串。

匹配整行

参数 ^Pattern$ 限制该模式,使其匹配整行。

寻找行

ed 编辑器使用三种类型的地址:行号地址、相对当前行的地址和模式地址。当前行(通常是子命令所作用的最后一行)是缓冲区中的参考点。

您可以用行号地址来做下面的工作:

不接受地址的子命令将地址的出现认为是错误。接受地址的子命令可以使用赋予或缺省的地址。如果提供的地址过多,命令就使用最后(最右边)的那些地址。

在大多数情况下,用逗号(,)将地址分隔(例如 2,8)。分号(;)也可以分隔地址。地址之间的分号使得 ed 编辑器设置当前行为第一个地址,然后计算第二个地址(例如,为搜索设置起始行)。在一个地址对中,第一个地址的数值必须小于第二个地址。

您可以使用行号和符号地址来执行下面的任务:

寻址当前行

一个 .(句点)寻址当前行。.(句点)是多数 ed 编辑器子命令的缺省值,并且不需要进行指定。

按数字寻址行

要寻找缓冲区中指定的一行,请输入:

Number$

其中参数Number代表行号。示例:

2253$

寻址行号 2253 的行作为当前行。

寻址第一行之前的行

要寻找缓冲区内第一行之前的行,请输入:

0

寻找最后一行

要寻找缓冲区的最后一行,请输入:

$

寻找指定行上面的行

要指定当前行之上指定数目行的一个地址,请输入:

-Number

其中参数Number指的是您想要寻找的行是当前行之上的第多少行。示例:

-5

寻找当前行之上的第 5 行,并作为新的当前行。

您也可以只指定一个 - 来寻找当前行之上紧接当前行的一行。减号具有累计效果。例如,地址 - -(两个减号)寻找当前行之上两行的行。

寻找指定行之下的行

要指定当前行之下指定数目行的地址,请输入:

+Number

其中参数Number指的是您想要寻找的行是当前行之下第多少行。+(加号)是可选的。示例:

+11

寻找当前行之下的第 11 行,并将其作为新的当前行。

您也可以只指定一个 + 来寻找当前行之下紧接当前行的一行。+ 具有累计效果。例如,地址 + +(两个加号)寻找当前行之下两行的行。

寻址第一行到最后一行

要寻址第一行到最后一行,请输入:

,

,(逗号)代表了地址对 1,$(从第一行到最后一行)。第一行成为当前行。

寻址当前行到最后一行

要寻址当前行到最后一行,请输入:

;

;(分号)代表了地址对 .,$(从当前行到最后一行)。

寻址一组行

要寻址一组行,请输入:

FirstAddress,LastAddress

其中,参数FirstAddress是您想要寻址的组中的第一行的行号(或符号地址),而参数LastAddress是该组最后一行的行号(或符号地址)。该组中的第一行成为当前行。示例:

3421,4456

从行 3421 寻址到行 4456。行 3421 成为当前行。

寻址包含指定模式的下一行

要寻找含有匹配字符串的下一行,请输入:

/Pattern/

其中,参数 Pattern 是字符串或正则表达式。从当前行之后的行开始搜索,当找到该模式的匹配时停止。如果必要的话,搜索到达缓冲区的末尾,环绕到缓冲区的开始,并且继续搜索直到找到匹配或者返回到当前行。例如:

/Austin, Texas/

寻址含有 Austin、 Texas 的下一行,并将其作为当前行。

寻址包含指定模式的上一行

要寻址包含模式匹配的上一行,请输入:

?Pattern?

其中,参数 Pattern 是字符串或正则表达式?Pattern? 结构,和 /Pattern/ 一样,可以搜索整个缓冲区,但是它往相反的方向搜索。例如:

?Austin, Texas?

寻址含有 Austin、Texas 的上一行,并将其作为当前行。

寻址标记过的行

要寻址用子命令 k 标记过的行,请输入:

'x

其中参数 x 是从 az 的一个小写字母。例如:

'c

是用子命令 k 寻找标记为 c 的行。

子命令

用 ed 编辑器子命令执行下面的操作:

在大多数情况下,您只能在一行上输入一条 ed 编辑器子命令。但是,可以将 l(列表)和 p(打印)子命令添加给除了 e(编辑)、E(编辑)、f(文件)、q(退出)、Q(退出)、r(读)、w(写)和 !(操作系统命令)子命令之外的任何子命令。

子命令efrw接受文件名作为参数。ed 编辑器存储子命令使用过的最后一个文件的名称,并将其作为缺省文件名。如果不赋予文件名,下一个子命令eEfrw就使用该缺省的文件名。

ed 编辑器在出现错误的情况下给出两个消息之一:? (问号)或?File。当 ed 编辑器收到中断信号(Ctrl-C 按键顺序)时,它显示一个 ? 并返回命令方式。当 ed 编辑器读文件时,它废弃 ASCII 空字符和最后一个换行字符之后的所有字符。

编辑文件

您可以使用 ed 编辑器的子命令执行下面的任务:

添加文本

(.)a [l] [n] [p] Text. 子命令a(添加)将文本添加到缓冲区中指定行之后。子命令a设置最后插入的行为当前行,或者,如果没有插入行的话,就设置为指定的行。0 地址将文本添加到缓冲区的起点。

如果您想要显示所添加的文本,请输入可选的子命令l(列表)、n(行号)或p(打印)。

输入您的文本,并在每一行的末尾敲 Enter 键。如果您不在每一行的结束处敲 Enter 键,ed 编辑器就在您的字符输满一行后自动将光标移到下一行。ed 编辑器将您敲 Enter 键之前的所有字符认为是一行,不管这些字符在屏幕上占据了多少行。

在您输完所有文本后,请在新行的起始处输入一个 . (句点)。

(.)(.)i [l] [n] [p]Text. 子命令i(插入)将文本插入到指定行之前,并将当前行设为最后插入的一行。如果没有插入任何行,子命令i将指定行设为当前行。您不能对这个子命令使用 0 地址。

如果您想要显示插入的文本,请输入可选的子命令l(列表)、n(行号)或p(打印)。

输入您的文本,并在每一行的末尾敲 Enter 键。如果您不在每一行的结束处敲 Enter 键,ed 编辑器就在您的字符输满一行后自动将您的光标移到下一行。ed 编辑器将您敲 Enter 键之前的所有字符认为是一行,不管这些字符在屏幕上占据了多少行。

在您输完所有文本后,请在新行的起始处输入一个 . (句点)。

注:
只有文本的放置上,子命令i与子命令a不同。

您可以使用不同的 ed 编辑器子命令在不同的位置添加文本。请使用前面的格式来执行下面的编辑任务:

在当前行之后添加文本
  1. 请输入下面的子命令:
    a[l][n][p]
    其中lnp是显示添加文本的可选子命令。
  2. 请输入文本,并敲 Enter 键。
  3. 请输入一个. (句点),并再次敲 Enter 键以返回命令方式。
在当前行之前添加文本
  1. 请输入下面的子命令:
    i[l][n][p]
    其中lnp是显示添加文本的可选子命令。
  2. 请输入文本,并敲 Enter 键。
  3. 请输入一个. (句点),并再次敲 Enter 键以返回命令方式。
在指定行之后添加文本
  1. 请输入下面的子命令:
    Addressa[l][n][p]
    其中参数Address是行号,插入的文本将在该行之后。可选的子命令lnp显示所添加的文本。
  2. 请输入文本,并敲 Enter 键。
  3. 请输入一个. (句点),并再次敲 Enter 键以返回命令方式。
在指定行之前添加文本
  1. 请输入下面的子命令:
    Addressi[l][n][p]
    其中参数Address是行号,插入的文本应该在该行之前。可选的子命令lnp显示所添加的文本。
  2. 请输入文本,并敲 Enter 键。
  3. 请输入一个. (句点),并再次敲 Enter 键以返回命令方式。
在包含搜索模式的行之后添加文本
  1. 请输入下面的子命令:
    [Address]g/Pattern/a[l][n][p]
    其中Address是可选的参数,它指定了搜索Pattern参数中指定的模式的行的范围。参数Pattern是字符串或正则表达式。如果您省略了参数Address,ed 编辑器就在整个文件中搜索包含模式的行。可选的子命令lnp显示所添加的文本。
  2. 请输入反斜杠:
    \
  3. 请输入文本。要在所添加的文本中开始新的行,请输入反斜杠:
    \
    并敲 Enter 键。您所输入的文本将被添加到包含了命令所指定的模式的每一行之后。
  4. 要返回命令方式,请敲 Enter 键。
在包含搜索模式的行之前添加文本
  1. 请输入下面的子命令:
    [Address]g/Pattern/i[l][n][p]
    其中Address是可选的参数,它指定了搜索Pattern参数中指定的模式的行的范围。参数Pattern是字符串或者正则表达式. 如果您省略了参数Address,ed 编辑器就在整个文件中搜索包含模式的行。可选的子命令lnp显示所添加的文本。
  2. 请输入反斜杠:
    \
  3. 请输入文本。要在所添加的文本中开始新的行,请输入反斜杠:
    \
    并敲 Enter 键。您输入的文本将被添加到包含了命令中所指定的模式的每一行之前。
  4. 要返回命令方式,请敲 Enter 键。
在不包含搜索模式的行之后添加文本
  1. 请输入下面的子命令:
    [Address]g/Pattern/a[l][n][p]
    其中Address是可选的参数,在它指定范围内的行中,搜索不包含Pattern参数所指定的模式的行。参数Pattern是字符串或正则表达式。如果您省略参数Address,ed 编辑器就在整个文件中搜索不包含该模式的行。可选的子命令lnp显示所添加的文本。
  2. 请输入反斜杠:
    \
  3. 请输入文本。要在所添加的文本中开始新的行,请输入反斜杠:
    \
    并敲 Enter 键。您所添加的文本被添加到不包含命令所指定的模式的每一行之后。
  4. 要返回命令方式,请敲 Enter 键。
在不包含搜索模式的行之前添加文本
  1. 请输入下面的子命令:
    [Address]g/Pattern/i[l][n][p]
    其中Address是可选的参数,在它指定范围内的行中,搜索不包含Pattern参数所指定的模式的行。参数Pattern是字符串或正则表达式。如果您省略了参数Address,ed 编辑器就在整个文件中搜索不包含该模式的行。可选的子命令lnp显示所添加的文本。
  2. 请输入反斜杠:
    \
  3. 请输入文本。要在所添加的文本中开始新的行,请输入反斜杠:
    \
    并敲 Enter 键。您输入的文本被添加到不包含命令中所指定的模式每一行之前。
  4. 要返回命令方式,请敲 Enter 键。

改变文本

(.,.)(.,.)c [l] [n] [p]Text. 子命令c(更改)删除指定的、您想要替换的行,然后用您输入的新行替代它们。子命令c将新输入的最后一行设为当前行,或者,如果没有输入的话,就将没有删除的第一行设为当前行。

如果您想要显示插入的文本,请输入可选的子命令l(列表)、n(行号)或p(打印)。

请输入新的文本,并在每行的结束敲 Enter 键。当您输完所有的新文本时,在行上输入一个 . (句点)。

您可以用 ed 编辑器以几种不同的方式更改文本。请使用前面的格式来执行下面的编辑任务:

更改当前行的文本
  1. 请输入下面的子命令:
    c[l][n][p]
    其中lnp是显示更改的文本的可选子命令。
  2. 请输入文本,并敲 Enter 键。
  3. 请输入一个. (句点),并再次敲 Enter 键以返回命令方式。
更改一行或一组行的文本
  1. 请输入下面的子命令:
    Addressc[l][n][p]
    其中参数Address是要更改的一行或一组行的地址。可选的子命令lnp显示更改的文本。
  2. 请输入文本,并敲 Enter 键。
  3. 请输入一个. (句点),并再次敲 Enter 键以返回命令方式。
更改包含了指定模式的行的文本
  1. 请输入下面的子命令:
    Addressg/Pattern/c[l][n][p]
    其中参数Address是一组行的地址,您想要在这组行中搜索参数Pattern所指定的模式。可选的子命令lnp显示更改的文本。
  2. 请输入反斜杠:
    \
  3. 请输入新的文本。要在新的文本中开始新的行,请输入反斜杠:
    \
    并敲 Enter 键。
  4. 要返回命令方式,请再次敲 Enter 键,输入一个 . (句点),并再次敲 Enter 键。
更改不包含指定模式的行的文本
  1. 请输入下面的子命令:
    Addressv/Pattern/c[l][n][p]
    其中参数Address是一组行的地址,您想要在这组行中搜索参数Pattern所指定的模式。可选的子命令lnp显示更改的文本。
  2. 请输入反斜杠:

    \
  3. 请输入新的文本。要在新的文本中开始新的行,请输入反斜杠:
    \
    并敲 Enter 键。
  4. 要返回命令方式,请再次敲 Enter 键,输入一个 . (句点),并再次敲 Enter 键。

拷贝文本

(.,.)(.,.)tAddress [p] [l] [n] 子命令t(转移)将指定行的副本插入到参数Address所指定的行之后。子命令t接受 0 地址,认为是将行插入到缓冲区的起始处。

子命令t将拷贝的最后一行设为当前行。

如果您想要显示转移的文本,请输入可选的子命令l(列表)、n(行号)或p(打印)。

拷贝一行或一个行的集合是将指定的行留在它们初始的位置,而将副本放入新的位置。您可以通过指定地址或模式来选择要拷贝的行。请使用前面的格式来执行下面的编辑任务:

拷贝当前行
  1. 请输入下面的子命令:
    tAddress[l][n][p]
    其中参数Address是行号或符号地址,您想要将当前行的副本放置到该行之后。可选的子命令lnp显示拷贝的行。
  2. 请输入文本,并敲 Enter 键。
  3. 请输入一个. (句点),并再次敲 Enter 键以返回命令方式。
拷贝指定地址的行
  1. 请输入下面的子命令:
    LineNumbertDestinationAddress[l][n][p]
    其中参数LineNumber是您想要拷贝的行的地址,参数DestinationAddress代表您想让副本位于该行之后。可选的子命令lnp显示拷贝的行。
  2. 请输入文本,并敲 Enter 键。
  3. 请输入一个. (句点),并再次敲 Enter 键以返回命令方式。
拷贝包含了指定模式的行

请输入下面的子命令:

[Address]g/Pattern/t[DestinationAddress][l][n][p]

其中Address是可选参数,在它指定的行的范围中搜索包含了指定模式的行,参数Pattern是您要搜索的文本,而DestinationAddress是可选的参数,指定您想要拷贝的文本行在其之后。可选的子命令lnp显示拷贝的行。

如果您省略了参数Address,ed 编辑器就在整个文件中搜索包含模式的行。如果您省略了参数DestinationAddress,拷贝后的文本就被放置到当前行之后。

拷贝不包含指定模式的行

请输入下面的子命令:

[Address]v/Pattern/t[DestinationAddress][l][n][p]

其中Address是可选参数,在它指定的行的范围中搜索包含了指定模式的行,参数Pattern是文本,而DestinationAddress是可选的参数,指定您想要拷贝的文本行在某行之后。可选的子命令lnp显示拷贝的行。

如果您省略了参数Address,ed 编辑器就在整个文件中搜索不包含该模式的行。如果您省略了参数DestinationAddress,拷贝后的文本就被放置到当前行之后。

删除文本

(.,.)(.,.)d [l] [n] [p] 子命令d(删除)将指定的行从缓冲区中除去。最后一次删除的行之后的行就成为当前行。如果被删除的行原来位于该缓冲区的结束位置,新的最后一行就成为当前行。

如果您想要显示被删除的行,请输入可选的子命令l(列表)、n(行号)或p(打印)。

ed 编辑器提供了几种方式来删除文本。请使用前面的格式来执行下面的编辑任务:

删除当前行

请输入下面的子命令:

d[l][n][p]

其中lnp是显示被删除的行的可选子命令。

删除一行或一组行

请输入下面的子命令:

Addressd[l][n][p]

其中参数Address是您想要删除的行的行号或符号地址,而lnp是显示被删除的一行或几行的可选子命令。

删除包含了指定模式的一行或一组行

请输入下面的子命令:

[Address]g/Pattern/d[l][n][p]

其中Address是可选参数,它指定了您想要搜索的行的行号或符号地址,而参数Pattern是字符串或正则表达式代表了您想要查找的文本。如果您省略了参数Address,ed 编辑器就在整个文件中搜索包含了指定模式的行。可选的子命令lnp显示被删除的一行或几行。

删除不包含指定模式的一行或一组行

请输入下面的子命令:

[Address]v/Pattern/d[l][n][p]

其中Address是可选参数,它指定了您想要搜索的行的行号或符号地址,而参数Pattern是字符串或正则表达式代表了您想要查找的文本。如果您省略了参数Address,ed 编辑器就在整个文件中搜索不包含该模式的行。可选的子命令lnp显示被删除的一行或几行。

从当前行中删除文本
  1. 请输入下面的子命令:
    s/Pattern
    其中参数Pattern是字符串或者正则表达式,代表您想要删除的文本。
  2. 要从行中删除模式的第一个实例,请输入:
    //

    要从行中删除模式的每一个实例,请输入:

    //g
  3. 如果您想要显示删除的对象,请输入下面的可选子命令之一:
    l

    n

    p

  4. 请敲 Enter 键。
在选定的行中删除文本
  1. 请输入一组行的地址来选择(或者跳过这一步来选择所有行)。
  2. 要选择第 4 步中参数 Pattern 所指示的行,请输入:

    g

    要选择第 4 步未被参数 Pattern 所指示的行,请输入:

    v
  3. 要进入您想要搜索的文本,请输入下面的子命令:

    /Pattern/s

    其中参数Pattern是您想要搜索的文本。

  4. 请输入下面的子命令之一来做出所希望的删除:

    要在选中的每一行中删除参数Pattern的第一个实例,请输入:

    ///

    要在选中的每一行中删除参数Pattern的每一个实例,请输入:

    ///g

    要在选中的每一行上删除第一个出现了指定次数的参数Pattern(其中参数Number为整数),请输入:

    ///Number

    要在参数Pattern所选择的每一行中删除参数OtherPattern所指示的第一个字符串(其中参数OtherPattern是您想要搜索的模式),请输入:

    /OtherPattern//

    要在参数Pattern所选择的每一行中删除参数OtherPattern的每一个实例,请输入:

    /OtherPattern//g

    要在参数Pattern所选择的每一行中删除第一次出现了指定次数的参数OtherPattern(其中参数Number为整数),请输入:

    /OtherPattern//Number
  5. 如果您想要显示删除的对象,请输入下面的可选子命令之一:
    l

    n

    p

  6. 请敲 Enter 键。

例如,要从某范围的行中删除某个模式的所有实例,请输入:

38,$g/tmp/s/gn

前面的示例在行 38 到最后一行间的所有行(38,$)中搜索 tmp 字符串并在这些行中删除该字符串的每一个实例(/g)。然后它显示文本被删除的行及它们的行号(n)。

要从包含该模式的所有行中删除该模式的所有实例,请输入:

g/rem/s///gl

前面的示例在整个文件中(地址参数被省略)搜索包含(g)字符串 rem 的所有行。它从每一行中删除字符串 rem 的所有实例(///g),然后显示删除文本的行,包括这些行中的非打印字符(l)。

从寻址的行中删除文本
  1. 请输入下面的子命令:
    Addresss/Pattern
    注:
    参数 Address 后面是子命令 s
    其中参数 Address 是您想要从中删除模式的行的行号、行号范围或符号地址,而参数 Pattern 是字符串或正则表达式,代表您想要删除的文本。
  2. 要从每一行中删除模式的第一个实例,请输入:
    //

    要从每一行中删除该模式的每一个实例,请输入:

    //g
  3. 如果您想要显示删除的对象,请输入下面的可选子命令之一:
    l
      
    n
      
    p

  4. 请按 Enter 键。
从包含了指定模式的行中删除文本
  1. 请输入下面的子命令:
    [Address]g/Pattern/s
    其中 Address是可选参数,它指定了包含了指定模式的行的行号、行号范围或符号地址,而参数 Pattern 是字符串或正则表达式,代表您想要查找和删除的文本。如果您省略了参数 Address,ed 编辑器就在文件的所有行中搜索该模式。
  2. 要从包含该模式的每一行中删除它的第一个实例,请输入:
    ///
    OR

    要从包含该模式的每一行中删除它的每一个实例,请输入:

    ///g
  3. 如果您想要显示删除的对象,请输入下面的可选子命令之一:
    l

    n

    p

  4. 请按 Enter 键。
从包含了不同的指定模式的行中删除模式
  1. 请输入下面的子命令:

    [Address]g/SearchPattern/s

    其中 Address 是可选参数,它指定了包含了指定模式的行的行号、行号范围或符号地址,而参数 SearchPattern 是字符串或正则表达式,代表您想要更改的行中的文本。如果您省略了参数 Address,ed 编辑器就在文件的所有行中搜索该指定模式。

  2. 要指定您想要删除的文本,请输入:
    /DeletePattern/
  3. 要从每一行中删除模式的第一个实例,请输入:
    /
    OR

    要从每一行中删除该模式的每一个实例,请输入:

    /g
    注:
    整条子命令字符串像这样:
    [Address]g/SearchPattern/s/DeletePattern//[g]
  4. 如果您想要显示删除的对象,请输入下面的可选子命令之一:
    l

    n

    p

  5. 请敲 Enter 键。

例如,要从包含了不同的指定模式的行中删除模式的第一个实例,请输入:

1,.g/rem/s/tmp//l

前面的示例搜索第一行到当前行(1,.)中所有包含(grem 字符串的行。它从这些行的每一行(/)中删除字符串 tmp 的第一个实例,然后显示文本被删除的行,包括这些行中的非打印字符(l)。

从不包含不同的指定模式的行中删除模式
  1. 请输入下面的子命令:

    [Address]v/SearchPattern/s

    其中Address是可选参数,它指定了包含了指定模式的行的行号、行号范围或符号地址,而参数SearchPattern是字符串或正则表达式,代表不在您想要查找并更改的行中的文本。如果您省略了参数Address,ed 编辑器就在文件的所有行中搜索该指定模式。

  2. 要指定您想要删除的文本,请输入:
    /DeletePattern/
  3. 要删除该模式的第一个实例,请输入:
    /
    OR

    要从每一行中删除该模式的每一个实例,请输入:

    /g
    注:
    整条子命令字符串像这样:
    [Address]v/SearchPattern/s/DeletePattern//[g]
  4. 如果您想要显示删除的对象,请输入下面的可选子命令之一:
    l

    n

    p

  5. 请敲 Enter 键。

例如,要从不包含指定模式的行中删除模式的第一个实例,请输入:

1,.v/rem/s/tmp//l

前面的示例搜索第一行到当前行(1,.)中所有不包含(vrem 字符串的行。它从这些行的每一行中(/)删除字符串 tmp 的第一个实例,然后显示文本被删除的行,包括这些行中的非打印字符(l)。

显示文本

(.,.)l 子命令l(列表)以一种视觉上明确的格式将指定的行写到标准输出,并以相应的转义序列写字符\\\\\a\\b\\f\\r\\t\\v。子命令l将打印不出的字符写作一个 3 位数的八进制数,在该字符的每个字节前面加上一个 \ (反斜杠)(最重要的字节在第一位)。

子命令l将长的行换行,您可以通过写 \ (反斜杠) / 换行字符序列来指示换行点。换行发生在第 72 列的位置。$(美元符号)标记每一行的结束。您可以将 l 子命令附加给所有 ed 编辑器子命令,除了 eEfqQrw! 子命令。当前的行号被设置为被写的最后一行的地址。

(.,.)n 子命令n(行号)显示指定的行,每行的前面是它自己的行号和一个跳格字符(显示为空白);n将被显示的最后一行设置为当前行。您可以将子命令n附加到除efrw之外的任何 ed 编辑器子命令之上。例如,子命令dn删除当前行并显示新的当前行和行号。
(.,.)(.,.)p 子命令p(打印)显示指定的行并将被显示的最后一行设置为当前行。您可以将子命令p附加到除efrw之外的任何 ed 编辑器子命令之上。例如,子命令dp删除当前行并显示新的当前行。
(.)= 如果不提供地址,子命令=(等号)就显示当前行的行号。当前面有 $ 地址的时候,子命令=显示缓冲区内最后一行的行号。子命令=不更改当前行,并且不能附加到子命令g或子命令v之上。

当您搜索包含或不包含指定模式的行时,您可以选择某个范围的行号来搜索。您可以用几种不同的方式选择并显示一个 ed 编辑器文件中的一行或一组行。请使用前面的格式来执行下面的编辑任务:

显示指定的一行或一组行

请输入下面的子命令:

Addressp

其中参数Address是您想要显示的行的行号或符号地址。

指定的一行或几行被显示到屏幕上。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

显示一行或一组行以及它们的非打印字符

请输入下面的子命令:

Addressl

其中参数Address是您想要显示的行的行号或符号地址。

指定的一行或几行以及它们非打印字符被显示到屏幕上。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

显示指定的一行或一组行以及它们的行号

请输入下面的子命令:

Addressn

其中参数Address是您想要显示的行的行号或符号地址。

指定的一行或几行被显示到屏幕上。每一行的行号被显示在该行的旁边。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

显示包含了搜索模式的行

请输入下面的子命令:

Addressg/Pattern/p

其中参数Address是行的范围,参数Pattern是您想要搜索的字符串或者正则表达式

包含了指定模式的一行或几行被显示到屏幕上。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

显示包含搜索模式的行,包括它们的非打印字符

请输入下面的子命令:

[Address]g/Pattern/l

其中Address是可选参数,它指定了行的范围,参数Pattern是您想要搜索的字符串或正则表达式。如果您省略了参数Address,ed 编辑器就搜索整个文件。

包含了指定模式的一行或几行被显示到屏幕上。非打印字符在屏幕上显现。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

显示包含了搜索模式的行,包括它们的行号

请输入下面的子命令:

[Address]g/Pattern/n

其中Address是可选参数,它指定了行的范围,参数Pattern是您想要搜索的字符串或正则表达式。如果您省略了参数Address,ed 编辑器就搜索整个文件。

包含了指定模式的一行或几行被显示到屏幕上。每一行的行号被显示在该行的旁边。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

显示不包含搜索模式的行

请输入下面的子命令:

[Address]v/Pattern/p

其中Address是可选参数,它指定了行的范围,参数Pattern是您想要搜索的字符串或正则表达式。如果您省略了参数Address,ed 编辑器就搜索整个文件。

不包含指定模式的一行或几行被显示到屏幕上。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

显示不包含搜索模式的行,包括它们非打印字符

请输入下面的子命令:

[Address]v/Pattern/l

其中Address是可选参数,它指定了行的范围,参数Pattern是您想要搜索的字符串或正则表达式。如果您省略了参数Address,ed 编辑器就搜索整个文件。

不包含指定模式的一行或几行被显示到屏幕上,包括非打印字符。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

显示不包含了搜索模式的行,包括它们的行号

请输入下面的子命令:

[Address]v/Pattern/n

其中Address是可选参数,它指定了行的范围,参数Pattern是您想要搜索的字符串或正则表达式。如果您省略了参数Address,ed 编辑器就搜索整个文件。

不包含指定模式的一行或几行被显示到屏幕上,还有它们的行号。如果该组行太长而屏幕不能装下,ed 编辑器就从指定的第一行开始,尽量多地显示。

合并和分割行

(.,.+1)j [l] [n] [p] 子命令j(合并)通过除去行与行之间的换行符来合并相邻的行。如果仅给出一个地址,子命令j不进行任何操作。

如果您想要显示合并的行,请输入子命令l(列表)、n(行号)或p(打印)。这些子命令是可选的。

ed 编辑器提供了几种方式来合并或分割行。请使用前面的格式来执行下面的编辑任务:

合并当前行和之后的行

请输入下面的子命令:

j[l][n][p]

其中lnp是显示合并的行的可选子命令。

合并指定的行

请输入下面的子命令:

Addressj[l][n][p]

其中参数Address是将要组成一行的连续行的集合,而lnp是显示合并的行的可选子命令。

分割当前行
  1. 要在指定的模式之后分割当前行,请输入下面的子命令:
    s/Pattern/Pattern\
    其中参数Pattern是字符串,您想要从它后面分割该行。
    注:
    请保证参数Pattern所代表的两个字符串完全相同。
  2. 请按 Enter 键。
  3. 请输入下面的反斜杠:
    /
  4. 要显示分割的行,请输入下面的可选子命令之一:
    l

    n

    p

  5. 请敲 Enter 键。
分割指定的行
  1. 要在指定的模式之后分割指定的行,请输入下面的子命令:
    Addresss/Pattern/Pattern\
    其中参数Address是将被分割的行的地址,而参数Pattern是字符串,将从它之后分割该行。
    注:
    请保证参数Pattern所代表的两个字符串完全相同。
  2. 请敲 Enter 键。
  3. 请输入下面的反斜杠:
    /
  4. 要显示分割的行,请输入下面的可选子命令之一:
    l

    n

    p

  5. 请敲 Enter 键。

进行全局修改

(1,$)g/Pattern/SubcommandList [l] [n] [p] 子命令g(全局)首先给匹配参数Pattern的每一行都加上标记。该模式可以是一个固定的字符串或者正则表达式。然后,针对标记的每一行,该子命令都将该标记的行设置为当前行并运行参数SubcommandList。请在相同的行上输入单个的子命令或一个子命令列表的第一个子命令,并加上子命令g;请在不同的行顺序输入子命令。除最后一行之外,每一行都应该用一个 \ (反斜杠) 结束。

参数 SubcommandList 可能包含子命令 aic 以及它们的输入。如果 SubcommandList 参数中的最后一个命令通常都是终止输入方式的 .(句点),则 .(句点)是可选的。如果参数 SubcommandList 不存在,则显示当前行。参数 SubcommandList 不能包含子命令gGvV

如果您想要显示更改,请输入子命令l(列表)、n(行号)或p(打印)。这些子命令是可选的。

注:
子命令g类似于子命令v,它在不包含该模式的匹配的每一行上运行参数SubcommandList
(1,$)G/Pattern/ [l] [n] [p] 交互式子命令G(全局)将匹配参数Pattern的每一行都标记上,显示标记过的第一行,将该行设置为当前行,然后等待子命令。模式可以是一个固定的字符串或者正则表达式

子命令G不接受子命令aicgGvV。该子命令完成后,子命令G显示下一个标记的行,如此反复。子命令G把换行符当作空子命令。:& (冒号 & 符号) 让子命令 G 再次运行上一个子命令。您可以通过敲 Ctrl+C 来停止子命令G

如果您想要显示改动,请输入子命令l(列表)、n(行号)或p(打印)。这些子命令是可选的。

(1,$)v/Pattern/SubcommandList [l] [n] [p] 子命令v对不包含参数Pattern的匹配的每一行都运行参数SubcommandList中的子命令。模式可以是一个固定的字符串或者正则表达式

如果您想要显示更改后的结果,请输入子命令l(列表)、n(行号)或p(打印)。这些子命令是可选的。

子命令v不接受子命令aicgGV

注:
子命令v与子命令g互补,后者在包含该模式的匹配的每一行上运行参数SubcommandList
(1,$)V/Pattern/ [l] [n] [p] 子命令V将不匹配参数Pattern的每一行标记上,显示标记过的第一行,将该行设置为当前行,然后等待子命令。模式可以是一个固定的字符串或者正则表达式

如果您想要显示更改,请输入子命令l(列表)、n(行号)或p(打印)。这些子命令是可选的。

子命令V不接受子命令aicgGv

注:
子命令V与子命令G是互补的,后者将匹配该模式的行标记上。

标记文本

(.)(.)kx [l] [n] [p] 子命令k(标记)用参数x指定的名称标记指定的行,该参数必须是小写的 ASCII 字母。然后地址 'x(单引号标记在标记字符之前)寻址该行。子命令k不更改当前行。

如果您想要显示标记过的文本,请输入子命令l(列表)、n(行号)或p(打印)。这些子命令是可选的。

标记当前行

请输入下面的子命令:

kLetter[l][n][p]

其中参数Letter是从字母az,用作标记,而lnp是显示标记过的文本的可选子命令。

标记指定的行

请输入下面的子命令:

AddresskLetter[l][n][p]

其中参数Address是您想要标记的行的行号或符号地址,参数Letter是从字母az,用作标记。可选的子命令lnp显示标记过的文本。

移动文本

(.,.)(.,.)mA [l] [n] [p] 子命令m(移动)改变指定的一行或几行的位置。最先被移动的行跟在参数A所指定的行之后。参数 0 将指定的一行或几行移到该文件的开始。参数A所指定的地址不能是将被移动的行之一。子命令m将最后被移动的行设置为当前行。

如果您想要显示删除,请输入子命令l(列表)、n(行号)或p(打印)。这些子命令是可选的。

移动一行或一个行的集合将把指定的行从它们最初的位置删除,并将它们放置到一个新的位置。您可以用地址或模式选择移动哪些行。请使用前面的格式来执行下面的编辑任务:

移动当前行

请输入下面的子命令:

mAddress[l][n][p]

其中参数Address是您想要让当前行在其后的行的行号或符号地址,而lnp是显示移动的行的可选子命令。

移动指定地址的行

请输入下面的子命令:

LineNumbermDestinationAddress[l][n][p]

其中参数LineNumber是您想要移动的行的地址,参数DestinationAddress是您想要被移动的行放在其后的行。可选的子命令lnp显示移动的行。

移动包含指定模式的行

请输入下面的子命令:

[Address]g/Pattern/m[DestinationAddress][l][n][p]

其中参数Address是可选的参数,在它指定的行中搜索包含指定模式的行,参数Pattern是您正在搜索的文本,而DestinationAddress是可选的参数,代表您想让被移动的行跟随其后的行。可选的子命令lnp显示被移动的行。

如果您省略了参数Address,ed 编辑器就在整个文件中搜索包含模式的行。如果您省略了参数DestinationAddress,移动后的文本就被放置到当前行之后。

移动不包含指定模式的行

请输入下面的子命令:

[Address]v/Pattern/m[DestinationAddress][l][n][p]

其中Address是可选参数,在它指定的行的范围中搜索不包含指定模式的行,参数Pattern是文本,而DestinationAddress是可选参数,代表您想让被移动的行跟随其后的行。可选的子命令lnp显示被移动的行。

如果您省略了参数Address,ed 编辑器就在整个文件中搜索不包含该模式的行。如果您省略了参数DestinationAddress,移动后的文本就被放置到当前行之后。

保存文本

(1,$)w File 子命令w(写)将指定的行从缓冲区中拷贝到参数File所指定的文件中。如果该文件不存在,子命令w用许可模式 666(允许每个人读和写)创建它,除非umask设置指定另外的文件创建方式。

子命令w不更改缺省文件名(除非参数File是自从您启动 ed 编辑器以来被用过的第一个文件名)。如果您不提供文件名,子命令w就使用缺省文件名。子命令w不更改当前行。

如果 ed 编辑器成功地从缓冲区中写入该文件,它就显示被写的字符数。如果您指定子命令! Command而不是文件名,子命令w读取参数Command指定的操作系统命令的输出。子命令w不将您指定的操作系统命令的名称保存作缺省的文件名。

注:
由于对于子命令w来说 0 不是合法的地址,所以您不能用命令ed创建一个空文件。

您可以以几种方式保存对文件的更改。请使用前面的格式来执行下面的编辑任务:

保存文件到当前文件

请输入下面的子命令:

w

当前文件是以它当前的名称保存的,ed 编辑器显示写入的字符数。

保存文件的一部分到当前文件

请输入下面的子命令:

Addressw

其中参数Address指定了要写的一行或一组行。ed 编辑器显示写入的字符数。

保存文件到不同的文件

请输入下面的子命令:

w File

其中参数File是要写入的文件的名称。

当前文件被保存到参数File所指定的文件中。ed 编辑器显示写入的字符数。

保存文件的一部分到不同的文件

请输入下面的子命令:

Addressw File

其中参数Address指定了要写的一行或一组行,而参数File指定了要写入的文件。

指定的行被保存到参数File所指定的文件。ed 编辑器显示写入的字符数。

搜索文本

您可以从当前行向前或向后搜索某种模式的文本。该模式可以是由文字字符和特殊字符 ^ (音调符号), $(美元符号), .(句点), [(左括弧)、](右括弧), *(星号), \ (反斜杠), %(百分号)和 & 键组成的字符串或正则表达式

您可以使用 ed 编辑器来执行下面的文本搜索:

向前搜索

请输入下面的子命令:

/Pattern

其中参数 Pattern 是字符串或正则表达式,它指定了搜索的文本。

光标移动到该模式所指定的文本的第一个字符。

向后搜索

请输入下面的子命令:

?Pattern

其中参数Pattern是字符串或正则表达式,它指定了搜索的文本。

光标移动到该模式所指定的文本的第一个字符。

往相同的方向重复一次搜索

请输入下面的子命令:

/

光标移动到上一次搜索命令中的模式所指定的最近的文本实例的第一个字符。

往相反的方向重复一次搜索

请输入下面的子命令:

?

光标移动到上一次搜索命令中的模式所指定的最近的文本实例的第一个字符。

替换文本

(.,.)(.,.)s/Pattern/Replacement/ [l] [n] [p]
(.,.)(.,.)s/Pattern/Replacement/ng [l] [n] [p]
子命令s(替换)在指定的每一行中搜索匹配参数Pattern的字符串,并用指定的参数Replacement替换该字符串。模式可以是一个固定的字符串或者正则表达式。如果没有全局子命令 (g) ,子命令 s 就只在指定的每一行上替换第一个匹配字符串。如果有子命令 g,子命令 s 就在指定的每一行上替换出现的每一个匹配字符串。如果子命令 s 没有为该模式找到匹配,它就返回错误消息 ?(问号)。

请输入子命令 l(列表)、n(行号)或 p(打印)来显示替换的文本。这些子命令是可选的。

注:
除空格和换行符之外,任何字符都可以分隔(定界)参数 PatternReplacement。子命令 s 将最后更改的行设置为当前行。

如果指定了参数 Number(整数),那么在指定的每一行中匹配字符串的第一个数被替换。

参数 Replacement 中所用的字符 & (与) 具有和参数 Pattern 相同的值。例如,子命令 s/are/&n't/ 具有和子命令 s/are/aren't/ 相同的效果,在当前行上把 are 替换为 aren't。 \& (反斜杠,与) 除去了字符 & 在参数 Replacement 中的特殊意义

子模式是由字符串 \( (反斜杠,左圆括号)和 \) (反斜杠,右圆括号)所封闭的模式的一部分;模式起作用仿佛封闭字符不存在。在参数 Replacement 中, \Number 指的是匹配子模式的字符串。例如,如果当前行中有模式the 的匹配,子命令 s/\(t\)\(h\) \(e\)/t\1\2ose) 就把 the 替换为 those。无论子模式是被嵌套还是位于一个系列中, \Number 都指的是参数 Number 所指定的具体值,即为从定界字符的左边数起的 \) (反斜杠,右圆括号)。

当 %(百分号)被单独用作参数 Replacement 时,它就让子命令 s 重复上一个参数 Replacement。如果 % 是较长的Replacement参数的一部分,或者如果 % 前面有一个 \ (反斜杠),它就不具备这种特殊的意义。

您可以通过将换行符替换到行中来分割行。在参数 Replacement 中。敲 \+Enter 的按键顺序引用是换行符(不显示),并将光标移动到下一行以为该字符串的剩余部分做好准备。换行符不能作为子命令 g 或子命令 v 的列表的一部分而被替换。

ed 编辑器提供了几种方式来替换文本。请使用前面的格式来执行下面的编辑任务:

在当前行中替换文本
  1. 请输入下面的子命令:
    s/OldString/NewString
    其中参数 OldString 是存在的文本,而参数 NewString 是您想要用来替换的文本。
  2. 请输入下面的操作之一:

    要在当前行中用参数 NewString 替换参数 OldString 的第一个实例,请输入:

    /

    要在当前行中用参数 NewString 替换参数 OldPattern 的每一个实例,请输入:

    /g
  3. 要显示更改的文本,请输入下面的可选子命令之一:
    l

    n

    p

  4. 请敲 Enter 键。
在指定的一行或一组行中替换文本
  1. 请输入下面的子命令:
    Addresss/OldPattern/NewString
    其中参数 Address 是您想要替换文本的一行或一组行的地址,参数 OldPattern 是存在的文本,而参数 NewString 是您想要用来替换的文本。
  2. 请输入下面的操作之一:

    要在每一行中用参数 NewString 替换参数 OldPattern 的第一个实例,请输入:

    /NewString/

    要在每一行中用参数 NewString 替换参数 OldPattern 的每一个实例,请输入:

    /NewString/g

    要在指定的每一行上用参数 NewString 替换参数 NumberOldPattern 的第一个实例,请输入:

    /NewString/Number
  3. 要显示更改的文本,请输入下面的可选子命令之一:
    l

    n

    p

  4. 请敲 Enter 键。
在包含了指定模式的行中替换该模式
  1. 请输入下面的子命令:
    Addressg/Pattern/s//NewString
    其中参数Address是一组行的地址,您想要在这组行中搜索参数Pattern所指定的模式,而参数NewString是您想要用来替换参数Pattern的文本。
  2. 请输入下面的操作之一:

    要在每一行中用参数NewString替换参数Pattern的第一个实例,请输入:

    /

    要在每一行中用参数NewString替换参数Pattern的每一个实例,请输入:

    /g
  3. 要显示更改的文本,请输入下面的可选子命令之一:
    l

    n

    p

  4. 请敲 Enter 键。
在包含了不同模式的行中替换模式
  1. 请输入下面的子命令:
    Addressg/Pattern/s/OldString/NewString
    其中参数Address是一组行的地址,您想要在这组行中搜索参数Pattern所指定的模式,参数OldString是您想要替换掉的文本,而参数NewString是您想要用来替换参数OldString的文本。
  2. 请输入下面的操作之一:

    要在包含了参数Pattern的每一行中用参数NewString替换参数OldString的第一个实例,请输入:

    /

    要在包含了参数Pattern的每一行中用参数NewString替换参数OldString的每一个实例,请输入:

    /g
  3. 要显示更改后的文本,请输入下面的可选子命令之一:
    l

    n

    p

  4. 请敲 Enter 键。
在未包含不同模式的行中替换模式
  1. 请输入下面的子命令:

    Addressv/Pattern/s/OldString/NewString

    其中参数Address是一组行的地址,您想要在这组行中搜索参数Pattern所指定的模式,参数OldString是您想要替换掉的文本,而参数NewString是您想要用来替换参数OldString的文本。

  2. 请输入下面的操作之一:

    要在不包含参数Pattern的每一行中用参数NewString替换参数OldString的第一个实例,请输入:

    /

    要在不包含参数Pattern的每一行中用参数NewString替换参数OldString的每一个实例,请输入:

    /g
  3. 要显示更改的文本,请输入下面的可选子命令之一:
    l

    n

    p

  4. 请敲 Enter 键。

撤销文本更改

u [l] [n] [p] 子命令u(撤销)将缓冲区恢复到它最近一次被 ed 编辑器的子命令修改之前的状态。子命令u不能撤销子命令efw

如果您想要显示更改,请输入子命令l(列表)、n(行号)或p(打印)。这些子命令是可选的。

撤销文本更改

请输入下面的子命令:

u[l][n][p]

其中lnp是显示更改的可选子命令。在最后一次保存之后的对该文本执行的所有添加、更改、移动、拷贝或删除的编辑功能都被撤销。

处理文件

您可以使用 ed 编辑器的子命令管理文件以执行下面的任务:

添加另外的文件到当前文件

($)r File 子命令r(读)将文件读到缓冲区内指定行之后。子命令r不会删除该缓冲区以前的内容。如果输入时没有参数File,子命令r读取缺省文件(如果有的话)到该缓冲区中。子命令r不更改缺省文件名。

0 地址使得子命令r将文件读入到该缓冲区的开始位置。当子命令r成功读取文件后,它显示读入缓冲区内的字符数,并将读入的最后一行设置为当前行。

如果在子命令r中 ! (感叹号)替换了参数File,该行剩下的部分就被认为是操作系统外壳命令,后者的输出将要被读取。子命令r不将操作系统命令名保存为缺省文件名。

将文件插入到当前行之后

请输入下面的子命令:

r File

其中参数File是要被插入的文件名。

ed 编辑器将参数File指定的文件读入到当前文件的当前行之后,并显示读入到当前文件中的字符数。

在指定地址的行之后插入文件

请输入下面的子命令:

Addressr File

其中参数Address指定了您想要放置其后的行,而参数File是将要被插入的文件名称。

ed 编辑器将参数File指定的文件读入到当前文件的指定行之后,并显示读入到当前文件中的字符数。

更改缺省文件名

f [File] 子命令f(文件名)将缺省文件名(存储下来的最近一次使用过的文件名)更改为参数File所指定的文件名。如果没有指定参数File,子命令f显示缺省文件名。(子命令e存储缺省文件名。)
显示文件名

请输入下面的子命令:

f

ed 编辑器显示编辑缓冲区中的文件名称。

命名文件

请输入下面的子命令:

f File

其中参数File是该编辑缓冲区内的文件的新名称。

编辑缓冲区内的文件被重新命名。

编辑其它的文件

e File 子命令e(编辑)首先从该缓冲区删除任何内容,将该缓冲区的最后一行设置为当前行,并显示读入该缓冲区的字符数。如果自缓冲区的内容被保存(使用子命令 w)以来该缓冲区已被更改,ed 编辑器会在它清除该缓冲区之前显示一个 ?(问号)。

子命令e将参数File存储为要使用的缺省文件名,如果必要的话,再随后使用子命令erw。(要更改缺省文件名的名称,请使用子命令f。)

当 ! (感叹号)替换了参数File的时候,子命令e就认为该行剩下的部分是操作系统外壳命令,并读入该命令的输出。子命令e不将外壳命令的名称存储为缺省文件名。

E File 子命令E(编辑)的作用和子命令e相似,有一点例外;子命令E不检查最近一次子命令w之后对该缓冲区做出的更改。在重新编辑文件之前进行的所有更改都会丢失。

您可以使用子命令 eE 执行下面的任务:

重新编辑当前文件而不保存它

请输入下面的子命令:

E

ed 编辑器显示该文件中的字符数。在重新编辑文件之前进行的所有更改都会丢失。

保存当前文件之后重新编辑它

请输入下面的子命令:

e

ed 编辑器显示该文件中的字符数。

在保存当前文件之后编辑文件

请输入下面的子命令:

e File

其中参数File是您想要编辑的新的或存在的文件的名称。

对于存在的文件,ed 编辑器显示该文件中的字符数。对于新文件,ed 编辑器显示一个 ?(问号)和文件名。

编辑文件而不保存当前文件

请输入下面的子命令:

E File

其中参数File是您想要编辑的新的或存在的文件的名称。

对于存在的文件,ed 编辑器显示该文件中的字符数。对于新文件,ed 编辑器显示一个 ?(问号)和文件名。

ed 编辑器子命令的其它功能

您可以使用 edit 编辑器子命令执行下面的任务:

更改提示符字符串

P 子命令 P(提示)打开或关闭用 *(星号)代表的 ed 编辑器提示符字符串。初始时,子命令 P 是关闭的。
启动或停止显示提示字符串

请输入下面的子命令:

P

ed 编辑器的提示符 *(星号)是否显示取决于它先前的设置。

输入系统命令

! 命令 ! 子命令允许您运行操作系统命令,而不用离开 ed 编辑器。在 ed 编辑器的某一子命令行上跟在 ! 子命令后的所有内容将解释成操作系统命令。在该命令字符串的文本中,ed 编辑器将未转义的 %(百分号)替换为当前文件名,如果存在的话。

可以通过在 ! ed 编辑器子命令后输入 !(感叹号)来重复先前的操作系统命令。如果操作系统的命令解释器(命令 sh)扩展了命令字符串,则 ed 编辑器回送扩展的行。! 子命令不更改当前行。

您可以使用 ! 子命令执行以下操作:

运行一条操作系统命令

请输入下面的子命令:

!Command

其中参数Command指定一条通常在提示符处输入的操作系统命令。

该命令运行并显示其输出。命令完成后,编辑器显示一个 !(感叹号)。

重复一条操作系统命令

请输入下面的子命令:

!

之前运行过的操作系统命令运行并显示其输出。命令完成后,编辑器显示一个 !(感叹号)。

运行几条操作系统命令
  1. 请输入下面的子命令来显示操作系统提示符:
    !sh
  2. 请输入一条操作系统命令。
  3. 敲 Enter 键来运行该命令并显示其输出。
  4. 重复步骤 2 和 3 来运行更多的操作系统命令。
  5. 敲 Ctrl+D 以返回命令方式。编辑器显示一个 !(感叹号)。

退出 ed 编辑器

q 子命令q(退出)检查该缓冲区是否在最近一次执行的更改之后已被保存到文件中,然后退出 ed 编辑器。如果该缓冲区没有保存到文件中,子命令 q 显示 ?(问号)消息。请再次输入子命令q以强行退出 ed 编辑器。对当前文件所做的更改丢失。
Q 子命令Q(退出)退出 ed 编辑器而不检查自从该缓冲区被保存到文件中以来是否做出了更改。自从最后一次保存以后对该缓冲区做出的任何更改都丢失。
检查编辑之后退出
  1. 请输入下面的子命令:
    q
  2. 如果 ed 编辑器显示一个?,请输入下面的子命令之一:

    要在退出之前保存更改,请输入:

    w

    然后敲 Enter 键。

    要退出而不保存更改,请输入:

    q
  3. 请敲 Enter 键。
退出并废弃编辑
  1. 请输入下面的子命令:
    Q
  2. 请敲 Enter 键。自从最后一次保存以后对该缓冲区做出的任何更改都丢失。

请求帮助

h h(帮助)子命令为显示的最新 ? 诊断或错误消息提供了简要的帮助消息。
H 子命令H(帮助)让 ed 编辑器为所有后来发生的 ? 诊断消息显示帮助消息。子命令H也解释前面的 ? ,如果有的话。子命令H交替地打开或关闭这种方式;它最初是关闭的。
启动或停止显示帮助消息

请输入下面的子命令:

H

是否为 ed 编辑器响应的 ? 显示帮助消息取决于前面的设置。

显示最后一条帮助消息

请输入下面的子命令:

h

为 ed 编辑器最近一次响应的 ? 显示一条帮助消息。

ed 编辑器中的字符类支持

在标准表达式Patterns中,范围表达式匹配所有那些属于当前语言环境的整理顺序的两个字符之间的字符集合。范围表达式的语法如下:

[character-character]

第一个字符在整理序列中必须低于或等于第二个字符。例如[a-c] 匹配 En_US 语言环境中 a 、 b 或 c 中的任何一个。

范围表达式一般被用来匹配一个字符类。例如[0-9] 被用来指代所有的数字,而 [a-z A-Z] 被用来指代所有字母。当根据当前的语言环境的整理序列来解释范围时,这种格式可能会产生不可预料的结果。

请用 [ ](括弧)内的字符类表达式来匹配字符,而不采用前面的格式。系统根据当前语言环境中的字符类定义解释这种表达式的类型。但是,您不能在范围表达式中使用字符类表达式。

字符类表达式的语法如下:

[:CharacterClass:]

也就是一个左括弧、一个冒号、字符类的名称、另一个冒号,然后是右括弧。

所有的语言环境中都支持下面的字符类:

[:upper:] 大写字母
[:lower:] 小写字母
[:alpha:] 大写字母和小写字母
[:digit:] 数字
[:alnum:] 字母数字字符
[:xdigit:] 十六进制数字
[:punct:] 标点字符(既不是控制字符,也不是字母数字)
[:space:] 空格、跳格符、回车、换行、垂直跳格或进纸符
[:print:] 可打印字符,包括空格
[:graph:] 可打印字符,不包括空格
[:cntrl:] 控制字符
[:blank:] 空格和跳格符

括弧是字符类定义的一部分。要匹配任意大写 ASCII 字母或 ASCII 数字,请使用下面的正则表达式:

[[:upper:] [:digit:]]

请不要使用表达式[A-Z0-9]

一种语言环境可能支持其它的字符类。

换行符是字符类[:space:]的一部分,但是将不被该字符类所匹配。换行符只能用特殊搜索字符 $(美元符号)和 ^ (脱字符) 匹配。

退出状态

命令edred返回下面的出口值:

0 成功结束。
>0 发生错误。

相关信息

命令edit、命令ex、命令grep、命令rsh、命令sed、命令sh、命令stty、命令vi或命令vedit、命令view

[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 | 法律条款 ]