Tr (UNIX)

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

trUNIXおよびUNIX系システムのコマンドである。名称は translate または transliterate の略。

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

使用例

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

$ echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
jolly

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

"\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 演算子(メソッド)があり、同様の働きをする。

外部リンク

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net