bfs(1)bfs(1)NAMEbfs - Scans files
SYNOPSISbfs [-] file...
The bfs command is a read-only line editor typically used to scan
files.
OPTIONS
Suppresses the display of file sizes. Normally, bfs displays the size
in bytes of the file being scanned.
DESCRIPTION
The bfs command is similar to the ed command, but has some additional
subcommands and the ability to process much larger files.
Input files can be up to 32K lines long, with up to 512 characters per
line. The command bfs is usually more efficient than ed for scanning a
file because the file is not copied to a buffer. It is useful for
identifying appropriate lines at which to use the csplit command when
dividing a large file into more manageable pieces for editing.
If you enter the P subcommand, bfs prompts you with * (asterisk). You
can turn off prompting by entering a P again. The command bfs displays
error messages only when prompting is turned on.
Pattern Searches
The bfs command supports all the address expressions described in
ed(1). Regular expressions are covered in detail in grep(1). In addi‐
tion, you can instruct bfs to search forward or backward through the
file with or without wraparound. If you specify a forward search with
wraparound, bfs continues searching from the beginning of the file
after it reaches the end of the file. If you specify a backward search
with wraparound, it continues searching backward from the end of the
file after it reaches the beginning. A search without wraparound stops
at the beginning or end of the file.
Specify the four types of searches as follows: Searches forward with
wraparound for pattern. Searches backward with wraparound for pattern.
Searches forward without wraparound for pattern. Searches backward
without wraparound for pattern.
The pattern matching routine of bfs differs somewhat from the one used
by ed and includes additional features.
Only lowercase letters a through z can be used, and all 26 marks are
remembered. See ed(1) for information on mark names.
SUBCOMMANDS
The e, g, v, k, n, p, q, w, = , !, and null subcommands operate the
same as for ed.
Subcommands such as --, +++-, +++=, -12, and +4p are accepted. Note
that 1,10p and 1,10 both display the first 10 lines.
The f subcommand displays only the name of the file being scanned;
there are no remembered filenames. The w subcommand is independent of
output diversion, truncation, or compression. See the xo, xt, and xc
subcommands that follow.
The following additional subcommands are available: Reads bfs subcom‐
mands from file. When bfs reaches the end of file or receives an INT
signal or if an error occurs, bfs resumes scanning the file that con‐
tains the xf subcommand. The xf subcommands can be nested to a depth of
10. 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, bfs writes to standard output.
Note that each redirection to a file creates the specified file, delet‐
ing an existing file if necessary. Positions a label in a subcommand
file. The label is ended with a newline character. Spaces between the
: (colon) and the start of the label are ignored. This subcommand can
be used to insert comments into a subcommand file, since labels need
not be referenced. Sets the current line to the line containing pat‐
tern and jumps to label in the current command file if pattern is
matched within the designated range of lines. The jump fails under any
of the following conditions: Either address1 or address2 is not between
the first and last lines of the file. address2 is less than address1.
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 can be used before other subcom‐
mands are run to test whether addresses are bad. Note that the
following subcommand is an unconditional jump: xb/^/label
The xb subcommand is allowed only if it is read from a file or a
pipe. If it is read from a pipe, only a downward jump is possi‐
ble. Truncates output from the p and null subcommands to number
characters. The default number is 255. Assigns the specified
value to the variable named number (0 to 9). You can put one or
more spaces between number and value. For example: xv5 100 xv6
1,100p
assigns the value 100 to the variable 5 and the value 1,100p to
the variable 6.
To reference a variable, put a % (percent sign) in front of the
variable name. Given the preceding assignments for variables 5
and 6, the following three subcommands each display the first
100 lines of a file: 1,%5p 1,%5 %6
To escape the special meaning of %, precede it with a \ (back‐
slash). 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, the following command line
stores the first line of the file junk in the variable 5: xv5
!cat junk
To escape the special meaning of ! as the first character of
value, precede it with a \ (backslash). For example, the fol‐
lowing command line stores the value !date in the variable 7:
xv7 \!date Tests the last saved exit value from a shell command
and jumps to label in the current command file if the value is 0
(zero). Tests the last saved exit value from a shell command
and jumps to label in the current command file if the value is
not 0 (zero). Turns compressed output mode on or off. (Com‐
pressed output mode suppresses empty lines and replaces multiple
spaces and tabs with a single space.)
If switch is 1, output from the p and null subcommands is com‐
pressed; 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.
SEE ALSO
Commands: csplit(1), ed(1), grep(1)
Functions: regexp(3)bfs(1)