bfs コマンド

目的

ファイルをスキャンします。

構文

bfs [ - ] ファイル

説明

bfs コマンドは、File パラメーターで指定されたファイルを読み取りますが、ファイルの処理は行いません。 ファイルをスキャンできますが編集することはできません。

bfs コマンドは、基本的には ed コマンドの読み取り専用バージョンです。異なるのは、bfs コマンドでははるかに大きなファイルを処理することができ、サブコマンドが追加されているという 2 点だけです。

入力ファイルの最大長は 32,767 行 (1 行当たり最大 255 文字) です。 ファイルはバッファーにコピーされないため、 bfs コマンドは通常、ファイルをスキャンするための ed コマンドよりも効率的です。 bfs コマンドが最も有効なのは、csplit コマンドを使って編集用に管理しやすい部分に分割される、大型ファイルのセクションを識別する場合です。

P サブコマンドを入力すると、bfs コマンドは * (アスタリスク) のプロンプトを表示します。 もう一度 P サブコマンドを入力すると、プロンプト表示をオフにできます。 プロンプト表示がオンになっていると、bfs コマンドはエラー・メッセージを表示します。

bfs コマンドは単一バイト環境でもマルチバイト環境でも実行できます。 言語環境は、シェルの LANG 環境変数 (/etc/environment ファイル内) の設定値によって決定されます。

正方向および逆方向で検索

bfs コマンドは、ed コマンドのセクションで説明されているすべてのアドレス式をサポートします。 また、bfs コマンドに対してファイルを正方向または逆方向に検索するように命令でき、循環を使うかどうかの指定もできます。 循環を使う正方向の検索を指定すると、bfs コマンドはファイルの終わりに達したあともファイルの先頭から検索を継続します。 循環を使う逆方向の検索を指定すると、先頭に達したあともファイルの終わりから逆方向の検索を継続します。 4 種類の検索を指定する記号は以下のとおりです。

項目 説明
/パターン/ 循環して正方向で Pattern を検索します。
?パターン? 循環して逆方向で Pattern を検索します。
>パターン> 循環せずに正方向で Pattern を検索します。
<パターン< 循環せずに逆方向で Pattern を検索します。

bfs コマンドのパターン・マッチング・ルーチンは、ed コマンドで使用されるルーチンとは多少異なり、regcmp サブルーチンのセクションで説明する付加機能が含まれています。 また、マークの名前にも多少違いがあります。つまり、小文字の a から z のみを使用し、26 のマークすべてが記憶されています。

フラグ

項目 説明
- ファイル・サイズの表示を抑制します。 一般に、bfs コマンドはスキャン中のファイルのサイズをバイト単位で表示します。

サブコマンド

egvknpqw= !、 および null の各サブコマンドの機能は、 ed コマンドのセクションで説明されているとおりです。 ただし、bfs コマンドではアドレスとサブコマンドの間にスペースを入れることはできません。 +++-+++=-12+4p などのサブコマンドが使えます。 1,10p1,10 は、どちらも最初の 10 行を表示します。 f サブコマンドはスキャン中のファイルの名前のみを表示し、 ファイル名を記憶しません。 w サブコマンドは、出力の逸脱、切り捨て、または圧縮から独立しています ( xoxt、 および xc サブコマンド)。 圧縮出力 モードでは、ブランク行は抑制され、複数のスペースとタブは 1 スペースに置換されます。

次の追加サブコマンドが使えます。

項目 説明
xf ファイル 指定したファイルから bfs のサブコマンドを読み取ります。 bfs コマンドでファイルの終わりに達するか、割り込み信号を受け取ったとき、またはエラーが発生すると、bfs コマンドは、xf サブコマンドが入っているファイルのスキャンを再開します。 これらの xf サブコマンドはレベル 10 までネストできます。
xo [ファイル] p サブコマンドと null サブコマンドからの出力を、指定されたファイルに送ります。このファイルは、ユーザー全員に読み取り/書き込みを許可する設定で作成されます。 File パラメーターを指定しないと、bfs コマンドは標準出力に書き出します。 ファイルにリダイレクトするたびに、必要に応じて既存のファイルが削除され、指定されたファイルが作成されます。
:ラベル サブコマンド・ファイル内にラベルを配置します。 ラベルは改行文字で終わります。 : (コロン) とラベルの先頭の間のスペースは無視されます。 このサブコマンドを使うと、ラベルを参照する必要はないので、サブコマンド・ファイル にコメントを挿入できます。
[Address1[,Address2]] xb/パターン/ラベル 指定された範囲の行の中でパターンが一致すると、指定したパターンが入っている行を現在行に設定して、現行コマンド・ファイル内の指定したラベルまで飛びます。 ジャンプは、以下の条件下では無効です。
  • Address1 パラメーターまたは Address2 パラメーターの値が、ファイルの先頭行と最終行の間にない場合。
  • Address2 の値が Address1 の値より小さい場合。
  • パターンが、指定した範囲の行 (先頭行と最終行を含む) のどれとも一致しない場合。

正しくないアドレスに関してエラー・メッセージを発行しないのはこのサブコマンドだけなので、このサブコマンドを使うと、他のサブコマンドを実行する前にアドレスが正しくないかどうかを検査できます。 サブコマンドは次のとおりです。

xb/^/label

このサブコマンドは無条件ジャンプです。

xb サブコマンドは、ワークステーション以外の場所から読み取る場合以外は使えません。 パイプから読み取る場合は、下方ジャンプしか実行できません。

 
xt [数値] p サブコマンドと null サブコマンドからの出力を、指定した文字数まで切り捨てます。 Number パラメーターのデフォルト値は 192 です。
15[] [] 指定した ValueDigit パラメーターに割り当てます。 Digit パラメーターの値は 0 から 9 までです。 DigitValueの間には、1 つ以上のスペースを入れることができます。 次に例を示します。
xv5 100
xv6 1,100p

値を割り当てます。100変数に5および以下の値1,100p変数に6.

変数を参照するには、%(パーセント記号) が変数名の前にあります。 変数の上記の割り当てがあるとします。5および 6、以下の 3 つのサブコマンドを使用します。

1,%5p
1,%5
%6

この 3 つのサブコマンドは、それぞれファイルの最初の 100 行を表示します。

特別な意味を逃れるために%の前に,\(円記号)。 次に例を示します。

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

この例では、printf 変数 (%c、%d、または %s) が入っている行を照合して表示します。

xv サブコマンドを使うと、コマンド出力の先頭行を変数の値として割り当てることもできます。 そのためには、Value パラメーターの先頭文字を ! (感嘆符) にして、その後ろにコマンド名を続けます。 次に例を示します。

xv5 !cat junk

最初の行を保管します。junk変数内のファイル5.

特別な意味を逃れるために!Valueの先頭文字として、その前に\(円記号)。 次に例を示します。

xv7 \!date

値を保管します!date変数内の7.

xbz ラベル シェル・コマンドから最後に保存された終了値を検査して、値が 0 であれば、現行コマンド・ファイル内の指定されたラベルまで飛びます。
xbn ラベル シェル・コマンドから最後に保存された終了値を検査して、値が 0 でなければ、現行コマンド・ファイル内の指定されたラベルまで飛びます。
xc [スイッチ] 圧縮出力モードをオンまたはオフにします。 (圧縮出力モードでは、ブランク行が抑止され、複数のスペースとタブがシングル・スペースに置き換えられます。)

Switch パラメーターの値が 1 であれば、p サブコマンドと null サブコマンドからの出力は圧縮されます。 Switch パラメーターの値が 0 であれば、出力は圧縮されません。 Switch パラメーターの値を指定しないと、Switch パラメーター (初期設定では 0) の現行値と反対の設定になります。

終了状況

次のような終了値が戻されます。
項目 説明
0 ファイルまたはコマンドのエラーなしに、正常終了しました。
>0 エラーが発生しました。

ファイル

項目 説明
/usr/bin/bfs bfs コマンドが入っています。