BFS(1)

НАЗВАНИЕ
bfs - Просматривает большие файлы.

СИНТАКСИС


bfs [-] name

ОПИСАНИЕ
Команда bfs сходна с командой ed(1) за исключением того, что она доступна только для чтения и обрабатывает гораздо большие файлы. Файлы могут быть до 1024К байт и 32К строк и иметь до 255 символов на строку. Команда bfs обычно более эффективна, чем команда ed для сканирования файла, т.к. файл не копируется в буфер. Она наиболее полезна для идентификации секций большого файла, где команда csplit(1) может быть использована для разделения этого файла на куски, удобные для редактирования.

Обычно, размер просматриваемого файла печатается, как размер любого файла, записанного командой W. Необязательный параметр тире (-) подавляет печать размеров. Ввод вызывается с помощью звездочки (*), когда набираются "P" и RETURN. "P" действует как переключатель, так, что запрос может быть выключен вводом других "P" и RETURN. Заметьте, что сообщения выдаются как реакция на ошибки только, если запрос включен.

Все адресные выражения,описанные по команде ed, обеспечиваются. Кроме того,регулярные выражения могут быть заключены между двумя символами, отличными от стандартных косой черты (/) и (?): знак больше(>) указывает на поиск, спускающийся вниз без циклического возврата, а знак меньше (< ) указывает на поиск, поднимающийся вверх без циклического возврата. Заметьте, что круглые скобки и фигурные скобки являются специальными и от них необходимо избавиться с помощью символа обратная косая черта (\). Так как команда bfs использует различные подпрограммы с регулярными выражениями сравнения из ed ,область действия регулярных выражений может быть гораздо шире Различия между командами ed и bfs перечислены ниже:

+
Регулярное выражение, за которым следует знак +,обозначает one or more times (один или более раз).Например, [0-9]+ эквивалентно [0-9][0-9]*.
\{m\}\{m,\}\{m,u\}
Целые значения, заключенные в \{\} показывают, какое число раз предыдущее регулярное выражение должно быть применено . m - минимальное число, а u - число, меньшее, чем 256, которое является максимальным. Если есть только m (например, \{m\}), это обозначает точное число раз, когда регулярное выражение должно быть применено.\{m\} аналогично \{m,infinity\}. Операции плюс (+) и звездочка (*) эквивалентны соответственно \{1,\} и \{0,\}.
(...)$n
Значение заключенного в скобки регулярного выражения должно возвращаться. Значение будет храниться в(n+l)том аргументе, следующем за подчиненным аргументом. Разрешается болше десяти заключенных в скобки регулярных выражений. regex выполняет их присваивания безусловно.
(...)
Круглые скобки используются для группировки. Оператор, например, *,+,\{\} может работать с единичными символами или регулярными выражениями, заключенными в круглые скобки. Например, \(a*)(cb+\)*\)$0.

Существует также незначительное отличие в именах меток: могут быть использованы только буквы от "a" до "z" и все 26 меток запоминаются.

e,g,v,k,p,q,w,=,! и нулевые команды работают как описано в команде ed, исключая то, что e не запоминает имена файлов, а g и v , когда не задан аргумент, возвращают на строку, расположенную за строкой, на которой вы находились. Команды такие, как ---, +++-,+++=,-12 и +4p допускаются. Заметьте, что команды 1,10p и 1,10 обе будут распечатывать первые 10 строк. Только команда f печатает имя файла, который просматривался; имя файла не запоминается.Команда w не зависит от отклонения, округления, уплотнения вывода (см команды xo,xt и xc ниже).Допустимы следующие дополнительные команды:

xffile
Последующие команды берутся из файла с именем file. Когда достигается конец файла, приходит сигнал прерывания или происходит ошибка, чтение продолжается из файла, содержащего xf. Команды xf могут быть вложенными на глубину до 10.
xo[file]
Дальнейший вывод из p и пустых команд адресуется указанному файлу с именем file. Если file потерян, вывод адресуется к стандартному выводу. Заметьте, что каждое отклонение вызывает усечение или создание файла.
:label
Так ставится метка label в командном файле. Метка label завершается новой строкой, а пробелы между : и началом метки label игнорируются. Эта команда может также быть использована для вставки комментариев в командный файл, так как на метки нет необходимости ссылаться.
(...)xb/regular expression/label
Переход ( вверх или вниз ) делается на метку label, если за ней следует команда. Это не удается при одном из следующих условий:
  1. Один из двух адресов не лежит между 1 и $.
  2. Второй адрес меньше, чем первый.
  3. Регулярное выражение не совпадает по крайней мере одной строкой в указанном диапазоне,включая первую и последнюю строки.
В случае успеха точка (.) ставится на соответствующую строку и переход делается на метку label.Эта команда единственная, которая не выдает сообщение об ошибке при неверном адресе, так что она может быть использована для проверки того, являются ли адреса верными до выполнения других команд. Заметьте, что команда xb/^/label является безусловным переходом .

Команда xb разрешена только, если она читается не с терминала. Если она читается из канала, то возможен переход только вниз.

xtnumber
Вывод из p и пустых команд усекается максимум до number символов. Начальное значение = 255.
xv[digit][spaces][value]
Имя переменной является специфицированным параметром digit, следующим за xv. Команды Xv5100 или xv5 100 обе присваивают значение 100 переменной 5. Команда Xv61,100p присваивает значение 1,100p переменной 6. Для нахождения переменной по ссылке поставьте % перед именем переменной. Например, используя присваивания,приведенные выше, для переменных 5 и 6 имеем:

1,%5p

1,%5

%6

печатаются первые 100 строк.

g/%5/p

ищет символы 100 и печатает каждую строку, содержащую совпадение.Для того, чтобы избавиться от специального значения % , перед ним должен быть знак \. Например,

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

может использоваться для того,чтобы сопоставить строки и составить список строк, содержащих символы printf, десятичные целые или строки.

Другая особенность команды xv состоит в том, что первая строка вывода из команды системы XENIX может храниться в переменной .

Единственным требованием является требование того, чтобы первым символом value был a!. Например,


xv5!cat junk

!rm junk

!echo"%5"

xv6!expr%6+1

устанавливает текущую строку в переменной 5, печатает ее и увеличивает переменную 6 на единицу. Для того, чтобы избавиться от специального значения ! в качестве первого символа value, поставьте перед ним \. Например,

xv7\!date

помещает значение !date в переменную 7.
xbzlabel
xbnlabel
Эти две команды проверяют последний сохраненный return code (код возврата) из выполнения команды системой XENIX (!command) или ненулевое значение и делают переход к указанной метке. Два примера, приведенных ниже, отыскивают следующие пять строк, содержащих строку size:

xv55