Content-type: text/html Man page of bfs


Section: User Commands (1)
Index Return to Main Contents


bfs - Scans files  


bfs [-] file...

The bfs command is a read-only line editor typically used to scan files.


Suppresses the display of file sizes. Normally, bfs displays the size in bytes of the file being scanned.


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 addition, 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.


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 subcommands 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 contains 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, deleting 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 pattern 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 subcommands 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 possible. 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 \ (backslash). 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 following 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. (Compressed 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 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.


Commands:  csplit(1), ed(1), grep(1)

Functions:  regexp(3)



Pattern Searches

This document was created by man2html, using the manual pages.
Time: 02:43:01 GMT, October 02, 2010