nismatch コマンドと nisgrep コマンドは、NIS+ テーブルを検索して、それぞれ特定の文字列または正規表現に一致するエントリを探します。これらのコマンドは、エントリ自体、またはエントリの検索できた回数のどちらかを表示します。nismatch コマンドと nisgrep コマンドの相違を表 19–6 に示します。
表 19–6 nismatch と nisgrep の 比較
特性 |
nismatch |
nisgrep |
---|---|---|
検索指定 |
テキストのみ指定可能 |
正規表現が指定可能 |
速度 |
高速 |
低速 |
検索対象 |
検索可能列のみ |
すべての列 (検索可能かどうかとは無関係) |
検索構文 |
column= string ... tablename[ column= string,...], tablename |
column=exp ... tablename |
この節の例では、両方のコマンドの構文を説明します。
どちらのコマンドを使用する場合にも、検索するテーブルに対する読み取りアクセス権が必要です。
この節の例は、次に示す depts.doc.com. というテーブルの値をベースにしています。最初の 2 つの列だけが検索可能です。
Name (検索可能) |
Site (検索可能) |
Name |
---|---|---|
R&D |
SanFran |
kuznetsov |
Sales |
SanFran |
jhill |
Manf-1 |
Emeryville |
hosteen |
Manf-2 |
Sausalito |
lincoln |
Shipping-1 |
Emeryville |
tsosulu |
Shipping-2 |
Sausalito |
katabami |
Service |
Sparks |
franklin |
正規表現により、テキストと記号を組み合わせて使用し、特定の構成の列の値を検索できます。たとえば、正規表現 `Hello' は、Hello で始まる値を検索します。正規表現をコマンド行で使用するときは、必ず引用符で囲んでください。その理由は、正規表現記号の多くが Bourne シェルと C シェルでは特殊な意味をもつからです。たとえば :
rootmaster% nisgrep -h greeting='Hello' phrases.doc.com. |
正規表現の記号を表 19–7 にまとめます。
表 19–7 正規表現記号
シンボル |
説明 |
---|---|
^string |
string で始まる値を見つける |
string $ |
string で終わる値を見つける |
. |
ピリオドの数と等しい数の文字をもつ値を見つける |
[chars] |
角かっこ内の文字のどれかを含む値を見つける |
*expr |
expr についてゼロ回以上一致する値を見つける |
+ |
1 回以上現われるものを見つける |
? |
任意の値を見つける |
\'s-char ' |
? や $ などの特殊文字を見つける |
x | y |
x または y の値を見つける |
最初の列を検索するには、以下のように入力します。
nismatch string tablename nisgrep reg-exp tablename |
特定の列を検索するには、以下のように入力します。
nismatch column=string tablename nisgrep column=reg-exp tablename |
複数の列を検索するには、以下のように入力します。
nismatch column=string tablename ...\ nismatch [column=string,...],tablename nisgrep column=reg-exp ... \ tablename |
オプション |
説明 |
---|---|
-c |
カウント。エントリ自体ではなく、検索指定に一致したエントリのカウントを表示する |
-h |
ヘッダー。エントリの上のヘッダー行を表示し、各列名を表示する |
-M |
マスター。マスターサーバーに収められているテーブルのエントリだけを表示する。これによって、最新情報を取得できる。デバッグにだけ使うようにする |
テーブルの最初の列で特定の値を検索するには、最初の列の値と「tablename」を入力します。nismatch では、この値は文字列でなければなりません。nisgrep では、この値は正規表現でなければなりません。
nismatch [-h] string tablename nisgrep [-h] reg-expression tablename |
次の例では、depts テーブルを検索して、最初の列の値が R&D となっているすべてのエントリを探します。
rootmaster% nismatch -h `R&D' depts.doc.com. rootmaster% nisgrep -h `R&D' depts.doc.com. |
& がシェルによってメタキャラクタとして解釈されないように、R&D が引用符で囲まれています。
最初の列以外の特定の列を検索するには、次の構文を使います。
nismatch column=string tablename nisgrep column=reg-expression tablename |
次の例では、depts テーブルを検索して、第 2 列の値が SanFran となっているすべてのエントリを探します。
rootmaster% nismatch -h Site=SanFran depts.doc.com. rootmaster% nisgrep -h Site=SanFran depts.doc.com. |
2 つ以上の列で一致するエントリを検索するには、次の構文を使います。
nismatch [-h] [column=string, ... \ column=string,...],tablename nisgrep [-h] column=reg-exp ... \ tablename |
以下の例では、第 2 列の値が SanFran で、第 3 列の値が jhill のエントリを検索します。
rootmaster% nismatch -h [Site=SanFran,Name=jhill], depts.doc.com. rootmaster% nisgrep -h Site=SanFran Name=jhill depts.doc.com. |