Tr (UNIX)

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

RubyPerlなどのプログラミング言語にも、同様の機能を持つ`tr`演算子またはメソッドが存在します。例えば、Perlを使用すると、日本語の平仮名と片仮名を相互に変換する処理を記述できます。

まとめ

trコマンドは、テキストデータの文字を置換するための強力なツールです。シンプルな文字変換から、より複雑な文字コード変換や簡易的な暗号化まで、幅広い用途に利用できます。コマンドラインで手軽に利用できるため、テキスト処理の効率化に貢献します。ただし、オプションや文字範囲の指定方法、特殊文字の扱いなど、trコマンドのバージョンや利用環境によって挙動が異なる場合があるため、注意が必要です。


外部リンク

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

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。