tr(ティーアール)はUNIXおよびUNIX系システムのコマンドである。名称は translate または transliterate の略。

tr は標準入力から読み込んで標準出力に出力する。パラメータとして2つの文字集合を指定し、一方の文字集合に含まれる文字が出現する度に、もう一方の文字集合の同じ位置にある文字に置換して出力する。

使用例

編集

次の例では、アルファベットをアルファベット順で7つ後の文字に全て置換する(ah に。カエサル暗号の変種)。

$ echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
jolly

使用しているtrがもしPOSIX準拠ならば、最後の2つの語は単にa-z h-za-gと書くことができる。

特殊なtrにおいてのみ、"\n" を "\r\n" に置換するには、以下のようにすればよい。

$ tr -A '\12' '\15\12' < input1  > output1
$ tr -A '^M' '\15\12'  < output1 > output2

ただし、すべてのtr-Aオプションに対応しているわけではないことに注意してほしい。また、単一引用符の代わりに二重引用符を使うことはできない。シェルが逆スラッシュを解釈してしまうからだ。ここで、\nや\12や^Jは、それぞれエスケープ文字ASCII8進、カレット表記を使った改行文字を示している。\rや\15や^Mは、復帰文字である。背景については改行コードの項を参照。

次の例では、アルファベットをアルファベット順で1つ前の文字に全て置換する(az に)。

$ echo "ibm 9000" >computer.txt
$ tr a-z za-y <computer.txt
hal 9000

POSIX互換でない古い tr では、文字の範囲指定を角括弧で囲む必要があり、シェルが解釈するのを防ぐためにさらに引用符で囲む必要がある。

$ tr "[a-z]" "z[a-y]" <computer.txt

どちらのバージョンが呼び出されるか不明な場合、この例では範囲指定ではなく全文字を並べて示す必要がある(tr abcdefghijklmnopqrstuvwxyz zabcdefghijklmnopqrstuvwxy)。使い方によっては古い記法で済む場合もある。例えば、ROT13tr "[A-M][N-Z][a-m][n-z]" "[N-Z][A-M][n-z][a-m]" となり、最近のバージョンでも問題なく動作する。これは、角括弧が2つの文字集合の同じ位置にあるため、置換されても変化しないためであって、POSIX の tr が角括弧を解釈しないことには変わりない。

RubyPerl にも tr 演算子(メソッド)があり、同様の働きをする。例えば、日本語を扱えるPerlを使うことにより、以下のPerlスクリプトは平仮名と片仮名とを交換する。(ただし、「ヴ」「ヵ」「ヶ」を除く。)

tr/ぁ-んァ-ン/-ンぁ-/;
tr/ゝゞヽヾ/ヽヾゝゞ/;

外部リンク

編集
  • tr(1) JM Project
  • tr(1) man page(SunOS リファレンスマニュアル)
  • tr(1) man page(HP-UX リファレンス)