trコマンドは、
UNIXおよび
UNIX系オペレーティングシステムで利用可能なコマンドラインユーティリティです。名称は「translate(翻訳)」または「transliterate(翻字)」の略とされています。
機能概要
trコマンドは、標準入力からテキストデータを読み込み、指定された2つの文字集合に基づいて文字の置換処理を行い、結果を標準出力に書き出します。具体的には、第1の文字集合に含まれる文字が出現すると、第2の文字集合内の対応する位置にある文字に置換されます。この機能を利用することで、文字コードの変換、特定の文字の削除、簡易的な暗号化など、様々なテキスト処理を効率的に行うことができます。
基本的な使用例
以下の例は、アルファベットをアルファベット順で7文字後の文字に置き換えるものです(カエサル暗号の一種)。
bash
$ echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
jolly
上記の例では、`cheer`という文字列が、`jolly`に変換されています。
POSIX準拠のtrコマンドを使用している場合、文字範囲を `a-z` `h-za-g`のように簡略化して記述できます。
特殊文字の扱い
改行コードの変換など、特殊文字を扱うことも可能です。
bash
$ tr -A '\12' '\15\12' < input1 > output1
$ tr -A '^M' '\15\12' < output1 > output2
上記の例では、`
`(改行)を`\r
`(復帰改行)に変換しています。ただし、`-A`オプションはすべてのtrコマンドで利用できるわけではなく、また、引用符の扱いにも注意が必要です。
シェルがバックスラッシュを解釈してしまうため、シングルクォートを使用する必要があります。
文字範囲指定と古い記法
古いバージョンのtrコマンドでは、文字範囲を角括弧で囲む必要があり、
シェルによる解釈を防ぐために引用符で囲む必要がありました。
bash
$ tr "[a-z]" "z[a-y]"
この例では、`computer.txt`内のアルファベットを、1文字前のアルファベットに置き換えています。ただし、どのバージョンのtrコマンドが実行されるか不明な場合は、`tr abcdefghijklmnopqrstuvwxyz zabcdefghijklmnopqrstuvwxy`のように、すべての文字を明示的に指定する必要があります。一方で、
ROT13暗号のように、`tr "[A-M][N-Z][a-m][n-z]" "[N-Z][A-M][n-z][a-m]"`と記述することも可能で、この場合は角括弧で囲んでも問題なく動作します。これは、文字集合内の位置が変化しないためです。
他の言語におけるtr
Rubyや
Perlなどのプログラミング言語にも、同様の機能を持つ`tr`演算子またはメソッドが存在します。例えば、
Perlを使用すると、日本語の平仮名と片仮名を相互に変換する処理を記述できます。
まとめ
trコマンドは、テキストデータの文字を置換するための強力なツールです。シンプルな文字変換から、より複雑な文字コード変換や簡易的な暗号化まで、幅広い用途に利用できます。コマンドラインで手軽に利用できるため、テキスト処理の効率化に貢献します。ただし、オプションや文字範囲の指定方法、特殊文字の扱いなど、trコマンドのバージョンや利用環境によって挙動が異なる場合があるため、注意が必要です。
外部リンク
tr(1) JM Project
tr(1) man page(SunOS リファレンスマニュアル)
*
tr(1) man page(HP-UX リファレンス)