Analog 5.91beta1: エイリアス(置換)CASE INSENSITIVE (訳注:大文字小文字を区別しない) CASE SENSITIVE (訳注:大文字小文字を区別する)ログファイルにユーザ名が記録されている場合のために、ユーザ名についても同じようなコマンドがあります。デフォルトでユーザ名は常に大文字と小文字を区別しないものとして扱われますが、以下のコマンドを記述することで、この設定を変更できます。
USERCASE SENSITIVE
DIRSUFFIX default.htm(DIRSUFFIX に記述できるものは1つだけです) これ以外にも組み込みのエイリアスがあります。例えば、この時点でホスト名は小文字に変換されます。
FILEALIAS /football.html /soccer.html HOSTALIAS lion lion.statslab.cam.ac.ukFILEALIAS none という特別なコマンドを記述することで、明示的に記述されたもの以外のファイルに対するエイリアスを無効にすることができます。
それ以外の項目に対するエイリアスのコマンドとしては、BROWALIAS、 REFALIAS、USERALIAS、VHOSTALIASがあります。 ある項目に対して、複数のエイリアスが適用されることはありません。
FILEALIAS /football.html /soccer.html FILEALIAS /soccer.html /brazil.html上記の場合、/soccer.html というファイルは /brazil.html に変換されますが、/football.html は /soccer.html に変換されるだけで、もう一つのエイリアスは参照されません。
ALIAS コマンドではワイルドカードを使うこともできます: ? は任意の1文字にマッチし、* は任意の個数の文字にマッチします (0個の場合もあります)。 右側の引数では、 * にマッチした左側の引数の部分部分を示す表記として、$1、$2 といった記述もできます。また、特別なものとして、左側の引数に * がただ1つだけ存在する場合、右側の引数では、$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 の * は、貪欲(greedy)ではありません。複数のマッチングが考えられる場合は、範囲が最低限になるようなマッチングを行ないます。この方が意図した結果が得られることが多いでしょう。しかし、これは Perl の正規表現とは相反します。(なお、*を2つ並べて記述しても全く意味がありません。このように記述しても、$1や$2といったエイリアスの適用を行なう前に、1つの*にまとめられてしまいます)
ファイルにsearch argumentsが含まれている場合、FILEALIAS と REFALIAS は、やや直観的ではない動きをすることがあります。
UNIX 上のユーザに対する注意: ALIAS コマンドをコマンドライン上で +C オプションで指定した場合、シェルが $1 を展開してしまいますので、意図した結果が得られません。このシェルの動作を抑止するには、コマンドをダブルクオートではなく、シングルクオートで囲んでください。
TYPEALIAS .txt ".txt (Plain text files)"は、ファイル種類別レポート中の行に対する説明文を提供します。
通常のエイリアスコマンドと出力エイリアスコマンドの違いがわかりにくいこともあります。例えば、FILEALIASとREQALIASの違いはどこにあるのでしょうか? 実際のところ、両者の機能には多少の差異があります。FILEALIASはファイル名そのものに対して適用されますが、REQALIASは、リクエストレポート内の行に対してのみ適用されます。つまり、REQALIASがリクエストレポートにしか影響しないのに対し、FILEALIASは、ディレクトリレポートなど、ファイル名に関連する別のレポートにも影響するわけです。
もう一つの違いは、REQALIASがリクエストレポートの行ごとに適用されるという点でしょう。つまり、FILEALIASによって、複数のファイル名が同じファイル名に変換されると、それらのファイルはすべてのレポートにおいて一つのファイルとして扱われますが、REQALIASコマンドの場合、それらのファイルは依然として二つのファイルのままとして扱われ、リクエストレポート中でも同じ名前の行が複数現われることになるというわけです。
結局、どのコマンドをどういう場合に使うべきでしょうか?
すべての出力エイリアスコマンドを以下に示します: REQALIAS, REDIRALIAS,
FAILALIAS、TYPEALIAS、DIRALIAS、
HOSTREPALIAS、REDIRHOSTALIAS、FAILHOSTALIAS、
DOMALIAS、ORGALIAS、REFREPALIAS、
REFSITEALIAS、REDIRREFALIAS、FAILREFALIAS、
BROWREPALIAS、BROWSUMALIAS、OSALIAS、
VHOSTREPALIAS、REDIRVHOSTREPALIAS、
FAILVHOSTREPALIAS、USERREPALIAS、
REDIRUSERALIAS、FAILUSERALIAS。
なお出力エイリアスに関しては、エイリアス適用前にソートが行なわれてしまうという既知のバグが1つあります。このため、レポートに対する SORTBY コマンドが ALPHABETICAL に記述されていた場合、そのレポートは正しくソートされません。
ALIAS コマンドの左側の引数の先頭に「REGEXP:」をつけることで、コマンドの引数に正規表現を使うことが可能になります。
また、「REGEXPI:」を使うことで、Perl の m//i や UNIX のegrep -i のような大文字と小文字を区別しないマッチングを指定することができます (ホスト名や、CASE INSENSITIVE を指定した際のファイル名など、多くの項目では自動的に大文字と小文字を区別しないマッチングが行なわれます) 。
ALIASコマンドの右側の引数では、 左側の引数の1つめや2つめのワイルドカードにマッチした対象を示す、$1、$2といった記述もできます。
(もう一度書いておきますが、シングルクォートで囲まない限り、コマンドラインに$1や$2などを記述することはできません)
正規表現は、文字列の一部にマッチ(一致)するとマッチしたことになります。文字列全体に一致させたいときには、正規表現文字列の両側を ^ と $ で囲む必要があります。
例えば、
正規表現は貪欲です。複数のマッチングが考えられる場合は、範囲が最大限になるようなマッチングを行ないます。
Analog についての質問はanalog-help メーリングリスト をお使いください。 (訳注: 日本では analog-jp メーリングリスト をご利用ください)
ALIAS コマンドでは、正規表現を使うこともできます。
残念ながら、正規表現について知らない方に、いまここで使い方を教えるつもりはありません。UNIX を使っているのであれば、perlre、man regex、man grepなどと入力してください。正規表現には、様々な実装が存在します。Analog が使っているのは、Perl 形式の正規表現です。基本的に、この正規表現は UNIX の
egrep や GNU grep -E で使われている拡張正規表現のスーパーセットになります。
REQALIAS REGEXP:^(/~(.+?)/.*) "[$2] $1"
は、リクエストレポート中の /~sret1/backgammon/rules.html
を
[sret1] /~sret1/backgammon/rules.html
に変換します。
また、
HOSTALIAS REGEXP:^([^.]*)$ $1.mycompany.com
は、ドット(ピリオド)を含まないホスト名に、.mycompany.com を付け加えます (これがよい考えかどうかについては、FAQ での議論を参照してください)。
Analog ホームページ
23 August 2003