bfs
PURPOSE
Scans files.
SYNOPSIS
bfs [ - ] name
DESCRIPTION
The bfs command reads a file but does not do any proc-
essing of it, allowing you to scan but not edit it.
The bfs command is basically a read-only version of the
ed command, except it can process much larger files and
it has some additional subcommands. Input files can be
up to 32K lines long, with up to 255 characters per line.
bfs is usually more efficient than ed for scanning a
file, because the file is not copied to a buffer. It is
most useful for identifying sections of a large file
where you can use the csplit command to divide it into
more manageable pieces for editing.
If you enter the P subcommand, bfs prompts you with an
"*" (asterisk). You can turn off prompting by entering a
second P. bfs displays error messages when prompting is
turned on.
Forward and Backward Searches
The bfs command supports all the address expressions
described under "ed." In addition, you can instruct bfs
to search forward or backward through the file, with or
without wrap-around. If you specify a forward search
with wrap-around, bfs continues searching from the begin-
ning of the file after it reaches the end of the file.
If you specify a backward search with wrap-around, it
continues searching backwards from the end of the file
after it reaches the beginning. The symbols for speci-
fying the four types of search are as follows:
/pattern/ Searches forward with wrap-around for the
pattern.
?pattern? Searches backward with wrap-around for the
pattern.
>pattern> Searches forward without wrap-around for the
pattern.
<pattern< Searches backward without wrap-around for the
pattern.
The pattern matching routine of bfs differs somewhat from
the one used by ed and includes additional features (see
the regcmp subroutine in AIX Operating System Technical
Reference). There is also a slight difference in mark
names: only lowercase letters a through z may be used,
and all 26 marks are remembered.
FLAGS
- Suppresses the display of file sizes. Normally, bfs
displays the size in bytes of the file being scanned.
SUBCOMMANDS
The e, g, v, k, n, p, q, w, = , ! and null subcommands
operate as explained under "ed." Subcommands such as --,
+++-, +++=, -12, and +4p are accepted. Note that "1,10p"
and "1,10" both display the first ten lines. The f sub-
command displays only the name of the file being scanned;
there are no remembered file names. The w subcommand is
independent of output diversion, truncation, or com-
pression (see the xo, xt, and xc subcommands on page ).
Compressed output has strings of tabs and blanks reduced
to one blank and blank lines suppressed.
The following additional subcommands are available:
xf file Reads bfs subcommands from the file.
When bfs reaches the end of file or
receives an interrupt signal or if an
error occurs, bfs resumes scanning
the file that contains the xf subcom-
mand. These xf subcommands may be
nested to a depth of 10.
xo [file] Sends further output from the p and
null subcommands to the named file,
which is created with read and write
permission granted to all users. If
you do not specify a file parameter,
bfs writes to standard output. Note
that each redirection to a file
creates the specified file, deleting
an existing file if necessary.
:label Positions a label in a subcommand
file. The label is ended with a new-
line character. Blanks between the :
(colon) and the start of the label
are ignored. This subcommand may be
used to insert comments into a sub-
command file, since labels need not
be referenced.
[addr1[,addr2]]xb/pattern/label
Sets the current line to the line
containing pattern and jumps to label
in the current command file if
pattern is matched within the desig-
nated range of lines. The jump fails
under any of the following condi-
tions:
o Either addr1 or addr2 is not
between the first and last lines
of the file.
o addr2 is less than addr1.
o The pattern does not match at
least one line in the specified
range, including the first and
last lines.
This subcommand is the only one that
does not issue an error message on
bad addresses, so it may be used to
test whether addresses are bad before
other subcommands are run. Note that
the subcommand:
xb/^/label
is an unconditional jump.
The xb subcommand is allowed only if
it is read from some place other than
a work station. If it is read from a
pipe, only a downward jump is pos-
sible.
xt number Truncates output from the p and null
subcommands to number characters.
The default number is 255.
xv[digit] [value] Assigns the specified value to the
variable named digit (0 through 9).
You can put one or more spaces
between digit and value. For
example:
xv5 100
xv6 1,100p
assigns the value "100" to the vari-
able "5" and the value "1,100p" to
the variable "6".
To reference a variable, put a "%"
(percent sign) in front of the vari-
able name. Given the preceding
assignments for variables "5" and
"6", the following three subcommands:
1,%5p
1,%5
%6
each display the first 100 lines of a
file.
To escape the special meaning of "%",
precede it with a \ (backslash). For
example:
g/".*\%[cds]/p
matches and lists lines containing
printf variables ("%c", "%d", or
"%s").
You can also use the xv subcommand to
assign the first line of command
output as the value of a variable.
To do this, make the first character
of value an ! (exclamation point),
followed by the command name. For
example:
xv5 !cat junk
stores the first line of the file
"junk" in the variable "5".
To escape the special meaning of ! as
the first character of value, precede
it with a \ (backslash). For
example:
xv7 \!date
stores the value "!date" in the vari-
able "7".
xbz label Tests the last saved exit value from
a shell command and jumps to label in
the current command file if the value
is zero.
xbn label Tests the last saved exit value from
a shell command and jumps to label in
the current command file if the value
is not zero.
xc [switch] Turns compressed output mode on or
off. (Compressed output mode sup-
presses blank lines and replaces mul-
tiple blanks and tabs with a single
space.)
If switch is "1", output from the p
and null subcommands is compressed;
if switch is "0" it is not. If you
do not specify switch, the current
value of switch reverses. Initially,
switch is set to 0.
RELATED INFORMATION
The following commands: "csplit" and "ed."
The regcmp subroutine in AIX Operating System Technical
Reference.