ed 或 red 命令

用途

用于文本文件的行编辑器。

语法

Ed [ -p 字符串] [ -s | -] [文件]

红色 [ -p字符串] [ -s | -] [文件]

描述

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

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

命令 red 是命令 ed 的受限版本,是和受限的 shell (rsh) 一起使用。 使用 红色 命令时,只能编辑驻留在当前目录或 /tmp 目录中的文件; 无法使用 ! 子命令后面的 !(感叹号)提示。

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

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

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

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

以下列表提供了 ed 编辑器的最大限制。

  • 每个文件名最多 64 个字符
  • 每个全局子命令列表最多 256 个字符
  • 缓冲区大小为 128,000 个字符
    注: 缓冲区既包含原始文件,也包含编辑信息。

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

标志

描述
-p 字符串 将参数 String 设为编辑器的提示符。 String 的缺省值为空值(无提示符)。
-s 禁止使用 E 子命令, R 子命令和 W 子命令显示编辑器的字符计数。 此标志还禁止在 E 子命令和 Q 子命令中显示诊断消息,并禁止! ! 后的 (惊叹号) 提示 子命令后面的 !(感叹号)提示。
- 提供和 -s 标志一样的功能。

模式匹配

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

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

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

如果减号作为字符串中的第一个字符出现,那么它将失去其重要性。[-String]; 如果紧跟在初始抑扬符之后,[^-String]; 或者如果它显示为字符串中的最后一个字符,[String-].

]
作为字符串的一部分,而不是作为字符串终止符,当](右括号) 是字符串中的第一个字符,[]String]或者当它紧跟在初始抑扬符之后时[^]String].
形成模式

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

  • 由单个的普通字符组成的 RE 与字符串中相同的字符相匹配。
  • 一个 RE 后跟一个*(星号) 与 RE 匹配的字符的零次或多次匹配。 例如下面的模式:
    ab*cd
    和下面的每个字符串相匹配:
    acd
    abcd
    abbcd
    abbbcd
    但不匹配下面的字符串:
    abd
    如果存在选项,那么将选择从字符串开头开始的最长匹配项。 例如,给定下面的字符串:
    122333444
    模式。* 与 122333444 匹配, 3。* 3 与 122333 匹配,模式 .*2 与 122 匹配。
  • RE 后面紧跟着:
    描述
    \{m\} 精确匹配 m 次出现的、与该 RE 匹配的字符。
    \{M,\} 至少 m 次出现的、与该 RE 匹配的字符相匹配。
    \{M,N\} 与重复从 mn(含 n)之间任意次数的、与该 RE 匹配的字符相匹配。
    数字 mn 必须是从 0 到 255(含 255)的整数。 只要存在选项,此模式就匹配尽可能多的出现。
  • 您可以将几个 RE 组合到模式中,这些模式与包含了相同字符序列的字符串匹配。 例如,模式 AB\*CD 匹配字符串 AB*CD 模式 [A-Za-z]*[0-9]* 匹配任何含有字母(包含无)组合、并紧跟任何数字(包含无)组合的字符串。
  • 字符序列 \ (Pattern\) 标志着一个子模式,如果此子模式没有封闭,它就与该序列匹配同样的字符串。
  • 字符 \Number 匹配的字符串与该模式中某个子模式先前匹配的字符串相同(见前一条规则)。 参数 Number 的模式代表一个阿拉伯数字。 模式 \数字数字 参数指定的子模式的出现所匹配的字符串匹配 (按顺时针方向计数)。

    例如下面的模式:

    \(A\)\(B\)C\2\1
    匹配字符串 ABCBA。 您可以嵌套子模式。
限制匹配的模式

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

匹配行的第一个段

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

匹配行的最后一个段

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

与整个行匹配

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

寻找行

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

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

  • 指定新的当前行
  • 显示指定的一行或几行
  • 让某个命令作用于某一行或某几行

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

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

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

处理当前行

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

按编号寻址行

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

Number

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

2253

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

在第一行之前对行进行寻址

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

0
寻址最后一行

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

$
寻址在指定行前面的行

要指定一个地址,该地址是在当前行之前指定的行数,请输入:

-Number

其中, 数字 参数是您要寻址的当前行之前的指定行数。 例如:

-5

将当前行前面的五行作为当前行进行寻址。

您还可以仅指定当前行之前紧跟的行的 "-to" 地址。 减号具有累计效果。 例如,地址--(2 个减号) 对当前行前面的两行进行寻址。

在指定的行后寻址行

要指定在当前行后指定的行数为指定的地址,请输入:

+Number

其中, 数字 参数是您要寻址的当前行之后的指定行数。 +(加号)是可选的。 例如:

+11

将当前行后面的第 11 行作为当前行进行寻址。

您还可以仅指定一个 + 来对紧跟在当前行之后的行进行寻址。 + 具有累计效果。 例如,地址 + + (两个加号) 将对当前行后的两行进行寻址。

解决第一行到最后一行的问题
要寻址第一行到最后一行,请输入:
,

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

解决当前行到最后一行的问题
要寻址当前行到最后一行,请输入:
;

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

对一组行进行寻址
要寻址一组行,请输入:
FirstAddress,LastAddress
其中,参数 FirstAddress 是您想要寻址的组中的第一行的行号(或符号地址),而参数 LastAddress 是该组最后一行的行号(或符号地址)。 该组中的第一行成为当前行。 例如:
3421,4456

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

对包含指定模式的下一行进行寻址
要寻找含有匹配字符串的下一行,请输入:
/Pattern/
其中, 模式 参数是字符串或 正则表达式。 从当前行之后的行开始搜索,当找到该模式的匹配时停止。 如果必要的话,搜索到达缓冲区的末尾,环绕到缓冲区的开始,并且继续搜索直到找到匹配或者返回到当前行。 例如:
/Austin, Texas/
寻址含有 Austin、Texas 的下一行,并将其作为当前行。
对包含指定模式的上一行进行寻址

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

?Pattern?
其中, 模式 参数是字符串或 正则表达式。 该?模式?建筑/模式/,可以搜索整个缓冲区,但是它在相反的方向进行搜索。 例如:
?Austin, Texas?

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

解决标记线问题

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

'x
其中参数 x 是从 az 的一个小写字母。 例如:
'c
是用子命令 k 寻找标记为 c 的行。

子命令

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

在大多数情况下,您只能在一行上输入一条 ed 编辑器子命令。 但是,您可以将 (列表) 和 P (打印) 子命令添加到任何子命令,但 E (编辑) , E (编辑) , F (文件) , Q (退出) , (退出) , R (读取) , W (写入) 和 ! 除外 (操作系统命令)子命令之外的任何子命令。

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

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

编辑文件

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

添加文本

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

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

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

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

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

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

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

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

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

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

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

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

您可以用 ed 编辑器以几种不同的方式更改文本。 请使用前面的格式来执行下面的编辑任务:
要更改当前 LIne 的文本,请执行以下操作:
  1. 请输入下面的子命令:
    c[l][n][p]
    其中 NP 是显示已更改文本的可选子命令。
  2. 请输入文本,并按 Enter 键。
  3. 输入 (句点),并再次按 Enter 键以返回命令方式。
要更改一行或一组行的文本,请执行以下操作:
  1. 请输入下面的子命令:
    Addressc[l][n][p]
    其中参数 Address 是要更改的一行或一组行的地址。 NP 可选子命令显示已更改的文本。
  2. 请输入文本,并按 Enter 键。
  3. 输入 (句点),并再次按 Enter 键以返回命令方式。
要更改包含指定模式的行的文本
  1. 请输入下面的子命令:
    Addressg/Pattern/c[l][n][p]
    其中参数 Address 是一组行的地址,您想要在这组行中搜索参数 Pattern 所指定的模式。 NP 可选子命令显示已更改的文本。
  2. 请输入反斜杠:
    \
  3. 请输入新的文本。 要在新的文本中开始新的行,请输入反斜杠:
    \
    and press Enter.
  4. 要返回命令方式,请再次按 Enter 键,输入一个 . (句点),并再次按 Enter 键。
更改不包含指定模式的行的文本
  1. 请输入下面的子命令:
    Addressv/Pattern/c[l][n][p]
    其中参数 Address 是一组行的地址,您想要在这组行中搜索参数 Pattern 所指定的模式。 NP 可选子命令显示已更改的文本。
  2. 请输入反斜杠:
    \
  3. 请输入新的文本。 要在新的文本中开始新的行,请输入反斜杠:
    \
    and press Enter.
  4. 要返回命令方式,请再次按 Enter 键,输入一个 . (句点),并再次按 Enter 键。
复制文本

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

子命令 t 将复制的最后一行设为当前行。

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

复制一行或一个行的集合是将指定的行留在它们初始的位置,而将副本放入新的位置。 您可以通过指定地址或模式来选择要复制的行。 请使用前面的格式来执行下面的编辑任务:
要复制当前行
  1. 请输入下面的子命令:
    tAddress[l][n][p]
    其中参数 Address 是行号或符号地址,您想要将当前行的副本放置到该行之后。 NP 可选子命令显示复制的行。
  2. 请输入文本,并按 Enter 键。
  3. 输入 (句点),并再次按 Enter 键以返回命令方式。
复制指定的行 (按地址)
  1. 请输入下面的子命令:
    LineNumbertDestinationAddress[l][n][p]
    其中参数 LineNumber 是您想要复制的行的地址,参数 DestinationAddress 代表您想让副本位于该行之后。 NP 可选子命令显示复制的行。
  2. 请输入文本,并按 Enter 键。
  3. 输入 (句点),并再次按 Enter 键以返回命令方式。
要复制包含指定模式的行,请执行以下操作:
请输入下面的子命令:
[Address]g/Pattern/t[DestinationAddress][l][n][p]

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

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

要复制不包含指定模式的行,请执行以下操作:
请输入下面的子命令:
[Address]v/Pattern/t[DestinationAddress][l][n][p]

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

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

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

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

要删除当前行,请执行以下操作:
请输入下面的子命令:
d[l][n][p]
其中 NP 是显示已删除行的可选子命令。
要删除一行或一组行,请执行:
请输入下面的子命令:
Addressd[l][n][p]
其中 地址 参数是要删除的行的行号或符号地址,而 NP 是可选子命令,用于显示已删除的一行或多行。
删除包含指定模式的一行或多组行
请输入下面的子命令:
[Address]g/Pattern/d[l][n][p]
其中 地址 是可选参数,用于指定要搜索的行的行号或符号地址,而 模式 参数是字符串或 正则表达式 ,用于表示您要查找的文本。 如果您省略了参数 Address,ed 编辑器就在整个文件中搜索包含了指定模式的行。 NP 可选子命令显示已删除的一行或多行。
删除不包含指定模式的一行或一组行
请输入下面的子命令:
[Address]v/Pattern/d[l][n][p]
其中 地址 是可选参数,用于指定要搜索的行的行号或符号地址,而 模式 参数是字符串或 正则表达式 ,用于表示您要查找的文本。 如果您省略了参数 Address,ed 编辑器就在整个文件中搜索不包含该模式的行。 NP 可选子命令显示已删除的一行或多行。
从当前行中删除文本
  1. 请输入下面的子命令:
    s/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字符串。 它删除所有实例 (///g) 的rem然后显示已从这些行中删除文本的行,包括这些行中的非打印字符 (l).

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

    n

    p
  4. 请按 Enter 键。
要从包含不同指定模式的行中删除模式,请执行:
  1. 请输入下面的子命令:
    [Address]g/SearchPattern/s
    其中 Address 是可选参数,用于指定包含指定模式的行的行号,行号范围或符号地址,而 SearchPattern 参数是表示要更改的行中文本的字符串或 正则表达式 。 如果您省略了参数 Address,ed 编辑器就在文件的所有行中搜索该指定模式。
  2. 要指定您想要删除的文本,请输入:
    /DeletePattern/
  3. 要从每一行中删除模式的第一个实例,请输入:
    /
    要从每一行中删除该模式的每一个实例,请输入:
    /g
    注: 整个子命令字符串如下所示:
    [Address]g/SearchPattern/s/DeletePattern//[g]
  4. 如果您想要显示删除的对象,请输入下列其中一个可选子命令:
    l

    n

    p
  5. 请按 Enter 键。
例如,要从包含了不同的指定模式的行中删除模式的第一个实例,请输入:
1,.g/rem/s/tmp//l

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

要从不包含不同指定模式的行中删除模式
  1. 请输入下面的子命令:
    [Address]v/SearchPattern/s
    其中 Address 是一个可选参数,用于指定包含指定模式的行的行号,行号范围或符号地址,而 SearchPattern 参数是一个字符串或 正则表达式 ,表示不在要查找和更改的行中的文本。 如果您省略了参数 Address,ed 编辑器就在文件的所有行中搜索该指定模式。
  2. 要指定您想要删除的文本,请输入:
    /DeletePattern/
  3. 要删除该模式的第一个实例,请输入:
    /

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

    /g
    注: 整个子命令字符串如下所示:
    [Address]v/SearchPattern/s/DeletePattern//[g]
  4. 如果您想要显示删除的对象,请输入下列其中一个可选子命令:
    l

    n

    p
  5. 请按 Enter 键。
例如,要从不包含指定模式的行中删除模式的第一个实例,请输入:
1,.v/rem/s/tmp//l

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

显示文本
描述
(.,.) (list) 子命令以直观明确的形式将指定的行写入标准输出,并写入字符\\\,\\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 子命令或 子命令。
显示指定的一行或一组行
请输入下面的子命令:
Addressp
其中参数 Address 是您想要显示的行的行号或符号地址。

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

显示一行或一组行以及它们的非打印字符
请输入下面的子命令:
Addressl
其中参数 Address 是您想要显示的行的行号或符号地址。

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

显示指定的一行或一组行以及它们的行号
请输入下面的子命令:
Addressn
其中参数 Address 是您想要显示的行的行号或符号地址。

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

显示包含了搜索模式的行
请输入下面的子命令:
Addressg/Pattern/p
其中, 地址 参数是行范围,而 模式 参数是要搜索的字符串或 正则表达式

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

要显示包含搜索模式的行,包括它们的非打印字符
请输入下面的子命令:
[Address]g/Pattern/l
其中 地址 是用于指定行范围的可选参数, 模式 参数是您要搜索的字符串或 正则表达式 。 如果您省略了参数 Address,ed 编辑器就搜索整个文件。

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

显示包含了搜索模式的行,包括它们的行号
请输入下面的子命令:
[Address]g/Pattern/n
其中 地址 是用于指定行范围的可选参数, 模式 参数是您要搜索的字符串或 正则表达式 。 如果您省略了参数 Address,ed 编辑器就搜索整个文件。

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

要显示不包含搜索模式的行,请执行以下操作:
请输入下面的子命令:
[Address]v/Pattern/p
其中 地址 是用于指定行范围的可选参数, 模式 参数是您要搜索的字符串或 正则表达式 。 如果您省略了参数 Address,ed 编辑器就搜索整个文件。

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

显示不包含搜索模式的行,包括它们非打印字符
请输入下面的子命令:
[Address]v/Pattern/l
其中 地址 是用于指定行范围的可选参数, 模式 参数是您要搜索的字符串或 正则表达式 。 如果您省略了参数 Address,ed 编辑器就搜索整个文件。

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

显示不包含了搜索模式的行,包括它们的行号
请输入下面的子命令:
[Address]v/Pattern/n

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

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

连接和分割行

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

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

ed 编辑器提供了几种方式来合并或分割行。 请使用前面的格式来执行下面的编辑任务:
加入当前行和下一行
请输入下面的子命令:
j[l][n][p]
其中 NP 是显示连接行的可选子命令。
合并指定的行
请输入下面的子命令:
Addressj[l][n][p]
其中 地址 参数是一组将形成一行的连续行,而 NP 是可选子命令,用于显示连接的行。
要分割当前行
  1. 要在指定的模式之后分割当前行,请输入下面的子命令:
    s/Pattern/Pattern\
    其中参数 Pattern 是字符串,您想要从它后面分割该行。
    注: 请确保由 模式 参数表示的两个字符串完全相似。
  2. 请按 Enter 键。
  3. 请输入下面的反斜杠:
    /
  4. 要显示分割的行,请输入下列其中一个可选子命令:
    l

    n

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

    n

    p
  5. 请按 Enter 键。
进行全局更改

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

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

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

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

G 子命令不接受 ACGG 子命令。 该子命令完成后,子命令 g 显示下一个标记的行,如此反复。 子命令 g 将换行符当作空子命令。 A :&(冒号分号)会使 G 子命令再次运行前一个子命令。 您可以通过按 Ctrl+C 来停止子命令 g

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

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

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

子命令 不接受子命令 ACGG和 covered

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

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

子命令 不接受子命令 ACGG和 covered

注: 子命令 是对子命令 G 的补充,该子命令标记与模式匹配的行。
标记文本

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

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

要标记当前行

请输入下面的子命令:

kLetter[l][n][p]

其中, 信件 参数是标记的字母 AZNP 是可选子命令,用于显示标记的文本。

标记指定的行
请输入下面的子命令:
AddresskLetter[l][n][p]
其中参数 Address 是您想要标记的行的行号或符号地址,参数 Letter 是从字母 az,用作标记。 NP 可选子命令显示标记的文本。
移动文本

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

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

移动一行或一个行的集合会将指定的行从它们最初的位置删除,并将它们放置到一个新的位置。 您可以用地址或模式选择移动哪些行。 请使用前面的格式来执行下面的编辑任务:
要移动当前行,请执行以下操作:
请输入下面的子命令:
mAddress[l][n][p]
其中 地址 参数是您希望当前行跟随的行的行号或符号地址,并且 NP 是可选子命令,用于显示移动的行。
移动指定地址的行
请输入下面的子命令:
LineNumbermDestinationAddress[l][n][p]
其中参数 LineNumber 是您想要移动的行的地址,参数 DestinationAddress 是您想要被移动的行放在其后的行。 NP 可选子命令显示移动的行。
要移动包含指定模式的行,请执行以下步骤:
请输入下面的子命令:
[Address]g/Pattern/m[DestinationAddress][l][n][p]
其中参数 Address 是可选的参数,在它指定的行中搜索包含指定模式的行,参数 Pattern 是您正在搜索的文本,而 DestinationAddress 是可选的参数,代表您想让被移动的行跟随其后的行。 NP 可选子命令显示移动的行。

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

移动不包含指定模式的行
请输入下面的子命令:
[Address]v/Pattern/m[DestinationAddress][l][n][p]
其中 Address 是可选参数,在它指定的行的范围中搜索不包含指定模式的行,参数 Pattern 是文本,而 DestinationAddress 是可选参数,代表您想让被移动的行跟随其后的行。 NP 可选子命令显示移动的行。

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

保存文本

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

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

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

注: 因为 0 不是 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/模式/替换/ [] [N] [P] (.,.)S/模式/替换/ng [] [N] [P] 子命令 s(替换)在指定的每一行中搜索匹配参数 Pattern 的字符串,并用指定的参数 Replacement 替换该字符串。 模式可以是固定字符串,也可以是 正则表达式。 如果没有全局子命令 (G) ,那么 S 子命令仅替换每个指定行上的第一个匹配字符串。 如果存在子命令 g,子命令 s 就在指定的每一行上替换出现的每一个匹配字符串。 如果 S 子命令找不到模式的匹配项,那么它将返回错误消息?(问号)。

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

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

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

An & (ampersand) character used in the 替换 parameter has the same value as the 模式 parameter. 例如,子命令 s/are/&n't/ 与子命令 s/are/aren't/ 具有相同的效果,并在当前行中将 替换为 不是 。 A \& (backslash, ampersand) removes the special meaning of the & character in the 替换 parameter.

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

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

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

要替换当前行中的文本
  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 键。
撤销文本更改

描述
[] [N] [P] 子命令 u(撤销)将缓冲区恢复到它最近一次被 ed 编辑器的子命令修改之前的状态。 子命令无法撤销 EFW 子命令。

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

撤销文本更改
请输入下面的子命令:
u[l][n][p]

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

操纵文件

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

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

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

如果! (惊叹号) 替换 R 子命令中的 文件 参数,行的其余部分将作为要读取其输出的操作系统 shell 命令。 子命令 r 不将操作系统命令名保存为缺省文件名。

要在当前行之后插入文件,请执行以下操作:
请输入下面的子命令:
r File
其中参数 File 是要被插入的文件名。

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

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

请输入下面的子命令:

Addressr File

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

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

更改缺省文件名
描述
F [文件] 子命令 f(文件名)将缺省文件名(存储下来的最近一次使用过的文件名)更改为参数 File 所指定的文件名。 如果没有指定参数 File,子命令 f 显示缺省文件名。 ( E 子命令用于存储缺省文件名。)
显示文件的名称
请输入下面的子命令:
f

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

要命名文件
请输入下面的子命令:
f File
其中参数 File 是该编辑缓冲区内的文件的新名称。

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

编辑另外的文件
描述
E 文件 子命令 e(编辑)首先从该缓冲区删除任何内容,将该缓冲区的最后一行设置为当前行,并显示读入该缓冲区的字符数。 如果缓冲区在保存其内容后已被更改 (使用 W 子命令) ,那么 ed 编辑器将显示?

E 子命令将 文件 参数存储为缺省文件名,以便在必要时由后续的 ERW 子命令使用。 (要更改默认文件名的名称,请使用 F 子命令。)

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

E 文件 E (Edit) 子命令的工作方式与 E 子命令相似,但有一个例外; E 子命令不会检查在最后一个 W 子命令之后对缓冲区所作的更改。 在重新编辑文件之前进行的所有更改都会丢失。

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

要重新编辑当前文件而不保存它
请输入下面的子命令:
E 

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

保存当前文件后要对其进行重新编辑
请输入下面的子命令:
e

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

要在保存当前文件后编辑文件,请执行以下命令:
请输入下面的子命令:
e File

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

对于存在的文件,ed 编辑器显示该文件中的字符数。 对于新文件, ed 编辑器将显示以下内容:?和文件名。

在不保存当前文件的情况下编辑文件
请输入下面的子命令:
E File
其中参数 File 是您想要编辑的新的或存在的文件的名称。

对于存在的文件,ed 编辑器显示该文件中的字符数。 对于新文件, ed 编辑器将显示以下内容:?和文件名。

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

您可以使用 edit 编辑器子命令执行下面的任务:
更改提示字符串
描述
子命令 P(提示)打开或关闭用 *(星号)代表的 ed 编辑器提示符字符串。 初始时,子命令 P 是关闭的。
启动或停止显示提示字符串
请输入下面的子命令:
P

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

输入系统命令
描述
! 命令 ! 子命令允许您运行操作系统命令,而不用离开 ed 编辑器。 ! 之后的任何内容 ed 编辑器子命令行中的子命令被解释为操作系统命令。 在该命令字符串的文本中,ed 编辑器将未转义的 %(百分号)替换为当前文件名,如果存在。

您可以通过输入以下命令来重复先前的操作系统命令:!! 后的 (惊叹号) ed editor 子命令。 如果操作系统命令解释器 ( 命令) 展开命令字符串,那么 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 (help) 子命令提供最新帮助消息的简短帮助?诊断或错误消息提供了简要的帮助消息。
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 发生错误。