Tr (UNIX)

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

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

使用例 
次の例では、アルファベットをアルファベット順で7つ後の文字に全て置換する（a は h に。カエサル暗号の変種）。

 $ echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
 jolly

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

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

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

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

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

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

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

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

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

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

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

外部リンク 
 tr(1) JM Project
 tr(1) man page（SunOS リファレンスマニュアル）
 tr(1) man page（HP-UX リファレンス）

UNIXのソフトウェア