tr (UNIX)
tr(ティーアール)はUNIXおよびUNIX系システムのコマンドである。名称は translate または transliterate の略。
tr は標準入力から読み込んで標準出力に出力する。パラメータとして2つの文字集合を指定し、一方の文字集合に含まれる文字が出現する度に、もう一方の文字集合の同じ位置にある文字に置換して出力する。
使用例
[編集]次の例では、アルファベットをアルファベット順で7つ後の文字に全て置換する(a は h に。カエサル暗号の変種)。
$ 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つ前の文字に全て置換する(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
どちらのバージョンが呼び出されるか不明な場合、この例では範囲指定ではなく全文字を並べて示す必要がある(tr abcdefghijklmnopqrstuvwxyz zabcdefghijklmnopqrstuvwxy)。使い方によっては古い記法で済む場合もある。例えば、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/ゝゞヽヾ/ヽヾゝゞ/;