[ 先頭 | 上へ | 前へ | 次へ | 目次 | 索引 ]

Analog 5.01: エイリアス(別称)


analogがログファイルの各項目を読み込んだ後、analogは各項目にエイリアスを適用します。 もし大文字小文字を区別しないファイルシステムなら、analogはファイル名を小文字に変換します。 通常analogはUnixとBeOSファイルシステムは大文字小文字の違いを認識し、それ以外のシステムは区別しないと仮定します。 例えば、もしファイルを別のコンピュータに転送したなら、元のマシンの条件を使うようにこの設定を無効にしたい場合があるかもしれません。 以下のコマンドでこれをすることができます。
CASE INSENSITIVE     (訳者注:# 大文字小文字を区別しない)
CASE SENSITIVE       (訳者注:# 大文字小文字を区別する)
もしログファイルがこられらを記録するなら、ユーザー名にもにたコマンドがあります。 初期設定によって、ユーザー名は常に大文字小文字の違いを無視しますが、以下を優先して指定することができます。
USERCASE SENSITIVE   (訳者注:# 大文字小文字を区別する)

次に、analogは内蔵したエイリアスをそれぞれの項目に適用します。 例えば、ファイル名や参照元の%7E~と等しく、それに応じて翻訳します。 また、ディレクトリからファイル名の接尾辞を取り除きます。 この接尾辞は通常はindex.htmlですが、以下のコマンドによって代わりのもう一つ別のものを指定することができます。
DIRSUFFIX default.htm
(DIRSUFFIXは1つだけ指定できます。)別のビルトインエイリアスもあります:例えば、ホスト名はこの時点で小文字に変換されます。
この後、ユーザーによって指定されたエイリアスを適用します。 例えば、もしあなたが2つのファイル名が同じファイルに対応していると知っているときや、内部のホスト名をインターネット上の名称に変換したい場合にこれらのエイリアスは役立ちます。 以下のようなコマンドによってエイリアスを指定します。
FILEALIAS /football.html /soccer.html
HOSTALIAS lion lion.statslab.cam.ac.uk
他の全てのエイリアスをうち消す特別なコマンドFILEALIAS noneもあります。

他の項目に対するエイリアスにはBROWALIAS - ブラウザ名REFALIAS - リンク元USERALIAS - ユーザー名、そしてVHOSTALIAS - 仮想ホストがあります。 各項目に対しては1回だけエイリアスが適用されます。

FILEALIAS /football.html /soccer.html
FILEALIAS /soccer.html /brazil.html
ファイル/soccer.html/brazil.htmlへ変換されますが、/football.htmlはただ/soccer.htmlへ変換され、2つ目のエイリアスは適用されません。

エイリアスコマンドではワイルドカードも使えます。? は、どの1文字とも一致しますし、* は、何個の文字とも (文字が無い場合を含む) 一致します。 また右側では、元の*と一致する名前の一部を表すのに$1$2等も使えます。 特別な略記として、もし左側に*がただ一つあるならば、右側で$1と同様に*を使うことができます。 例えば

FILEALIAS /*/football/* /soccer/
/sport/football/rules.html/soccer/へ変換しますが、
FILEALIAS /*/football/* /$1/soccer/$2         # または
FILEALIAS /sport/football/* /sport/soccer/*
もまた/sport/football/rules.html/sport/soccer/rules.htmlへ変換します。

右側で$を表示するには$$を使います。あるいは、 どの $* もそのままで表示するためには、 右辺で "PLAIN:" を頭につけます。 例えば、

FILEALIAS /*/football/* PLAIN:/$1/soccer/$2
は、/sport/football/rules.html を文字通り /$1/soccer/$2 に変換します。

analogの*は何でも表すわけではありません: もし2種類の可能な一致の仕方があれば、左側の表現ができる限り短くなる様な一致の仕方をとります。 これは頻繁に起こります。 しかし、例えばPerlの正規表現とは異なります。 (2つ連続する*は全く意味を持ちませんが、もし試したのであれば$1$2等を当てはめる前に、1つの*になってしまいます。)

もしファイルが検索引数を持つときはFILEALIASREFALIASの振る舞いはやや直感からはずれます。

Unixユーザーへの注意: もしコマンドラインで+Cを用いてALIASコマンドを与えたならば、シェルは$1等を適用したり展開したりして、あなたの望まない結果を出すでしょう。 このシェルの振る舞いを止めるには、2重引用符の代わりに1重引用符をコマンドに書いてください。


出力エイリアスと呼ばれるもう一つのエイリアスコマンド群があります。 タイムレポート以外の各レポートに対して、対応するコマンドがあります。 ログファイルが読み込まれるときに各項目に適用するのではなく、出力の各行に対して適用されます。 例えば、以下のコマンド
TYPEALIAS .txt ".txt (Plain text files)"
は、ファイル種類別レポート中で該当行の説明をします。

いくつかのエイリアスと出力エイリアスコマンドは混乱を引き起こすかもしれません。 例えば、HOSTALIASHOSTREPALIASの違いは何でしょうか。 実際には、エイリアスが処理されるタイミングにより、いくつかの違いが現れます。 HOSTALIASはホストの項目に適用されますが、HOSTREPALIASホストレポートの行にのみ適用されます。 これは、HOSTALIAS がホスト名を使うドメインレポートのような他のレポートにも影響を及ぼすことを意味しますが、HOSTREPALIAS はホストレポートにだけ影響を及ぼします。(同様に、DOMALIAS は、ドメインレポートのみに適用されますが、他のレポートのドメインの変更はしません。)

他の違いは、HOSTREPALIASはホストレポートの各行に別々に適用されます。 これは、もし2つの異なるホスト名を HOSTALIAS コマンドで同じ名前にエイリアスを付けた場合、全てのレポート中で一つのホスト名になります。 しかしもし同じように HOSTREPALIAS コマンドが使われたならば、それらのホストは依然として2つのホストであり、ホストレポート中では別々の一覧になり、そのレポート中ではたまたま同じ名前を持つ2つの異なるホストになります。

要約すると、どの場合に各コマンドを使うべきだろうか。HOSTALIASは1つのホストが2つの異なる名前を持っている場合に通常使われるのに対して、HOSTREPALIASはホストレポートに注釈を付けるか、あるいは整理するために使われる。

出力エイリアスの全ての一覧は、REQALIAS - リクエストREDIRALIAS - リダイレクトFAILALIAS - リクエスト不成功TYPEALIAS - ファイル種類別DIRALIAS - ディレクトリHOSTREPALIAS - ホストREDIRHOSTALIAS- ホストリダイレクションFAILHOSTALIAS - ホスト不成功DOMALIAS - ドメインORGALIAS - 組織別REFREPALIAS - リンク元URLREFSITEALIAS - リンク元サイトREDIRREFALIAS - リダイレクトされたリンク元URLFAILREFALIAS - リンク元不成功BROWREPALIAS - ブラウザBROWSUMALIAS - ブラウザの概要OSALIAS - OSVHOSTREPALIAS - 仮想ホストREDIRVHOSTREPALIAS - リダイレクトされた仮想ホストFAILVHOSTREPALIAS - 仮想ホスト不成功USERREPALIAS - ユーザREDIRUSERALIAS - リダイレクトされたユーザ FAILUSERALIAS - ユーザ不成功 です。

レポート出力用エイリアスには既知のバグがあります。 レポートはエイリアスが適用される前にソートされます。 これはもしSORTBYがアルファベットに設定されていれば、そのレポートは正しくソートされないことを意味します。


ALIASコマンドで正規表現を使うことができます。 残念ながら、もしまだ知らない人がいてもここで正規表現の使いかたを教えるつりはありません。: もしUnix上でならば、man perlreman regex あるいは man grep と打ってみて下さい。正規表現のたくさんの例題があります。 analogが使うのはPerl構文の正規表現です。 一般に、これらはUnix の egrep あるいは grep -E によって使われる拡張された正規表現のスーパーセットです。

"REGEXP:" をエイリアスの左前につけることによって、ALIAS コマンド中に正規表現を含むことができます。あるいは、"REGEXPI:" を使うことによって 、Perl の m//i あるいは Unix の egrep -i のように、大小文字の区別をしない一致検索を指定することができます。(もし、CASE INSENSITIVE と明記したら、ホスト名やファイル名のような多くの項目は自動的に大小文字を区別しなくなります。)

左括弧の順番に勘定して一番目、二番目等の括弧でくくられた左辺の表現を表すために、エイリアスの右辺では $1$2 等を使用できる。(ここでもまた、一重引用符でくくれば、$1$2 等をコマンド行に書くことができる。)

正規表現は、文字列の一部分が一致すれば一致したことになる。文字列全体に一致させたいときには、正規表現の両端を ^$ でくくらなければならない。

例えばリクエストレポートの場合には、

REQALIAS REGEXP:^(/~(.+?)/.*)$ "[$2] $1"
/~sret1/backgammon/rules.html
[sret1] /~sret1/backgammon/rules.html
に変換する。 または
HOSTALIAS REGEXP:^([^.]*)$ $1.mycompany.com
は、全てのピリオッドを含んでいないホスト名に .mycompany.com を付け加える。 (これが良い考えかどうかは FAQ の議論を見よ。)

正規表現は貪欲である:もし2種類の一致の仕方があるときには、左側の一致を可能な限り進めてゆく。


analogホームページ

Stephen Turner
2001年5月19日

analogについての質問はanalog-helpメーリングリストをお使い下さい

[ 先頭 | 上へ | 前へ | 次へ | 目次 | 索引 ]