BFS(1) BFS(1) НАЗВАНИЕ bfs - редактор больших файлов СИНТАКСИС |bfs [-] имя ОПИСАНИЕ Команда bfs почти не отличается от команды ed(1), за исключением того, что она позволяет читать и редактиро- вать большие файлы. Файлы могут содержать до 1024 кило- байт и 32 тысячи строк, до 512 символов каждая, включая символ перевода строки (255 для 16-разрядных машин). Команда bfs обычно более удобна для просмотра файлов, чем ed(1), поскольку файл не копируется в буфер. Она может применяться для нахождения отдельных секций боль- шого файла, чтобы, используя команду csplit(1), разбить его на более удобные для редактирования части. Обычно размер читаемого файла выдится, как если бы была использована команда w. Использование опции - отменяет вывод размера. Приглашением к вводу данных является символ *, если набрано P и возврат каретки, как и в ed(1). Появление приглашения может быть отменено введе- нием еще одного символа P. Учтите, что сообщения об ошибках выдаются, только если приглашение не отменено. Адреса строятся по тем же правилам, что и в ed(1). В дополнение к этому регулярные выражения могут быть ок- ружены символами > (означает просмотр файла вниз без зацикливания) и < (просмотр вверх без зацикливания). Есть изменение и в именах маркеров: могут использовать- ся только буквы от a до z (все 26 запоминаются). Команды e, g, v, k, p, q, w, =, ! и пустая команда ра ботают так, как описано в ed(1). Допустимы команды вида ----, +++-, +++=, -12 и +4p. Заметим, что команды 1,10p и 1,10 обе выводят первые 10 строк. Команда f только выдает имя читаемого файла, имена файлов не запоминают- ся. Работа команды w не зависит от результатов выполне ния команд переназначения, усечения и уплотнения вывода (см. команды xo, xt и xc ниже). Можно использовать сле- дующие дополнительные команды: xf файл Последующие команды будут читаться из файла с ука- занным именем. Когда встретится конец файла, либо будет получен сигнал прерывания или сообщение об ошибке, чтение будет продолжено из файла, содержа- щего команду xf. Команды xf могут быть вложенными до 10 уровней. xn Показывает маркеры, уже установленные к настоящему моменту (маркеры устанавливаются командой k). xo [файл] Дальнейшая выдача команд p и пустой команды пере- назначается в указанный файл, который, если нужно, создается с режимом доступа 666 (читать и писать могут все), если командой umask(1) не определено другое значение. Если файл не указан, используется стандартный вывод. Учтите, что каждое переназначе- ние вызывает опустошение существующего или созда ние нового файла. : метка В командном файле заводится метка. Метка ограниче- на концом строки, пробелы между двоеточием и пер- вым символом метки игнорируются. Эта команда может использоваться для вставки комментариев в команд ный файл, ведь на метку ссылаться не обязательно. (.,.)xb/регулярное_выражение/метка Производится переход (вверх или вниз) на метку, если команда завершается успешно. Возможные причи- ны неудачи: 1. Адрес не находится между 1 и $. 2. Второй адрес меньше первого. 3. Регулярное_выражение не сопоставляется ни с од- ной строкой в указанном диапазоне, включая пер вую и последнюю. В случае успеха найденная строка становится теку- щей и производится переход на метку. Эта команда единственная, которая не выдает сообщения об ошиб ке, если адреса неправильны, поэтому она может быть использована для проверки правильности адре- сов перед запуском других команд. Команда xb/^/метка означает безусловный переход. Команда xb выполняется, только когда она считана не с терминала. Если она считана из канала, то возможен только переход вниз. xt число Выдача команды p и пустой команды усекается до указанного числа символов. Начальное число - 255. 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 в том, что первая строка выдачи команды UNIX может стать значением переменной. Единственное требование - первый сим- вол значения должен быть !. Например: |.w junk |xv5!cat junk |!rm junk |!echo "%5" |xv6!expr %6 + 1 результатом выполнения этих команд будет присваи- вание текущей строки переменной 5, ее вывод и уве личение переменной 6 на единицу. Для того, чтобы избежать специальной трактовки символа !, перед ним следует поставить \. Команда |xv7\!date присваивает значение !date переменной 7. |xbz метка |xbn метка Эти две команды анализируют код завершения послед- ней выполненной команды UNIX'а (!команда) и, если он равен 0 (xbz), или не равен 0 (xbn), выполняют переход на метку. В двух последующих примерах ищутся ближайшие 5 строк, содержащие цепочку сим- волов text. |xv55 |:1 |/text/ |xv5!expr %5 - |!if [ %5 != 0 ]; then exit 2; fi |xbn 1 |xv45 |:1 |/text/ |xv4!expr %4 - 1 |![ %4 != 0 ] |xbz 1 xc [переключатель] Если переключатель равен 1, выдача команды p и пустой команды уплотняется, если равен 0, то нет. Без аргумента команда xc меняет значение переклю чателя. Начальное значение переключателя соот- ветствует отсутствию уплотнения. Уплотнение заклю- чается в замене цепочек символов табуляции и про- белов одним пробелом и выбрасывании пустых строк. СМ. ТАКЖЕ csplit(1), ed(1), ex(1), umask(1). ДИАГНОСТИКА При ошибках в командах выдается ?, если отменена выдача приглашения. В противном случае выдаются подробные со- общения об ошибках.