bfs 命令

用途

扫描文件。

语法

bfs [ - ] 文件

描述

bfs 命令读取由 File 参数指定的文件,但不处理该文件。 可以扫描该文件,但不能对它进行编辑。

bfs 命令基本上是 ed 命令的只读版本,只有两个特例:bfs 命令能够处理较大文件且具有附加子命令。

输入文件可长达 32,767 行,每行有多达 255 个字符。 对于扫描文件,bfs 命令通常比 ed 命令更有效,因为文件不会被复制至缓冲区。 bfs 命令对于标识可分的较大文件部分最有用,它使用 csplit 命令将较大文件分为对于编辑来说更易管理的片断。

如果输入 P 子命令,bfs 命令会以一个 *(星号)作为提示。 可以输入第二个 P 子命令来关闭提示。 bfs 命令在提示打开时会显示错误消息。

bfs 命令可在单字节和多字节环境中运行。 LANG 环境变量(在 /etc/environment 文件中)的设置确定 shell 的语言环境。

向前和向后搜索

bfs 命令支持在 ed 命令下描述的所有地址表达式。 此外,可以指示 bfs 命令在文件中向前或向后搜索,无论是否回绕。 如果指定了带回绕的向前搜索,bfs 命令到达文件末尾后会继续从文件开头搜索。 如果指定了带回绕的向后搜索,该命令在到达开头后会继续从文件末尾搜索。 指定四种搜索类型的符号如下:

描述
/模式/ 带回绕的向前搜索 Pattern
?模式? 带回绕的向后搜索 Pattern
>模式> 不带回绕的向前搜索 Pattern
<模式< 不带回绕的向后搜索 Pattern

bfs 命令的模式匹配例程与 ed 命令使用的模式匹配例程有所不同且包括 regcmp 子例程中描述的附加功能。 在标记名称方面也有细微不同:只可使用 a 到 z 的小写字母,且会记忆所有 26 个标记。

标志

描述
- 禁止文件大小的显示。 通常,bfs 命令以字节来显示正在被扫描的文件大小。

子命令

egvknpqw=! 和空子命令按照 ed 命令中的解释运行。 然而,bfs 命令不支持地址和子命令间的空格。 诸如 +++-+++=-12+4p 子命令是可接受的。 110p110 都显示开头十行。 f 子命令仅显示正在扫描的文件名;没有记忆的文件名。 w 子命令独立于输出转换,截断或压缩 ( xoxt, 和 xc 子命令)。 压缩输出方式禁止空行并用单个空格替代多个空格和跳格。

以下附加子命令是可用的:

描述
xf 文件 从指定文件读取 bfs 子命令。 当 bfs 命令到达文件末尾或接收到中断信号,或者如果发生错误,bfs 命名会恢复扫描包含 xf 子命令的文件。 这些 xf 子命令可被嵌套至深度 10。
xo [文件] p 和空子命令将进一步输出发送至指定的文件,该文件创建时将读写许可授权给所有用户。 如果不指定 File 参数,bfs 命令写至标准输出。 每个至文件的重定向将创建所指定文件,需要时删除现有文件。
:标签 将标签定位于子命令文件中。 该标签以换行符结尾。 忽略 :(冒号)与标签开头间的空格。 该子命令可用于将注释插入子命令文件,因为无需引用标签。
[Address1[Address2]] xb/Pattern/标签 将当前行设置为包含指定模式的行,并转至当前命令文件中指定的标签(如果此模式在行的指定范围内匹配的话)。 在以下任何情况下跳转都会失败:
  • Address1Address2 参数的值都不处于文件第一和最后一行之间。
  • Address2 值比 Address1 值小。
  • 模式与指定范围内至少一行不匹配,包括第一和最后一行。

该子命令是仅有的不在坏地址上发出错误消息的子命令,因此在运行其他子命令前可用于测试地址是否是坏的。 子命令:

xb/^/label

是无条件转移的。

仅当从除工作站以外的其他地方读取 xb 子命令时,该子命令才被允许。 如果是从管道读取该子命令,只可能向下转移。

 
xt [Number] 截断从 p 子命令和空子命令至字符号的输出。 Number 参数的缺省值是 192。
xv[Digit] [] 将指定的 Value 指定给 Digit 参数。 Digit 参数的值可以是 0 到 9。 您可以在 DigitValue之间放置一个或多个空格。 例如:
xv5 100
xv6 1,100p

赋值100到变量5和值1,100p到变量6.

要引用变量,请将%变量名称前面的 (百分号)。 给定变量的先前赋值5 6,以下三个子命令:

1,%5p
1,%5
%6

每个会显示文件的开头 100 行。

逃避特殊意义%,在它之前\(反斜杠)。 例如:

g/".*\%[cds]/p

匹配并列出包含 printf 变量(%c、%d 或 %s)的行。

也可以使用 xv 子命令将命令输出的第一行指定为变量的值。 要做到这点,使 Value 参数的第一个字符成为 ! (感叹号),命令名紧跟其后。 例如:

xv5 !cat junk

存储第一行junk变量中的文件5.

逃避特殊意义!作为 Value的第一个字符,在其前面添加一个\(反斜杠)。 例如:

xv7 \!date

存储值!date在变量中7.

xbz 标签 测试 shell 命令的最后保存退出值并转至当前命令文件中指定的标签(如果值是 0 的话)。
xbn 标签 测试 shell 命令的最后保存退出值并转至当前命令文件中指定的标签(如果值不是 0 的话)。
xc [交换机] 关闭或打开压缩输出方式。 (压缩输出方式禁止空行并用单个空格替代多个空格和跳格。)

如果 Switch 参数具有值 1,那么来自 p 子命令和空子命令的输出会被压缩。 如果 Switch 参数是 0,那么该输出不会被压缩。 如果不为 Switch 参数指定值,那么 Switch 参数的当前值(初始设置为 0)逆向。

退出状态

返回以下退出值:
描述
重大安全事件数量 在没有任何文件或命令错误的情况下成功完成。
> 0 发生错误。

文件

描述
/usr/bin/bfs 包含 bfs 命令。