Linux / コマンド / tr - 標準入力の文字の置換と削除

trは、標準入力から入ってきた文字を置換または削除し、繰り返された文字を圧縮します。ファイル名を引数として直接受け取らないという点をまず覚えてください。

文字単位で入力を変換するフィルターです。置換では、1つ目と2つ目の文字リストの対応する位置を使うため、単語全体の置換とは異なります。リストは正規表現ではなく、シェルの展開を避けるため引用符で囲みます。単語や文脈、正規表現で置き換えたい場合はsedによるテキストの置換が適しています。

基本的な文法

tr [オプション] 文字リスト1 [文字リスト2] < 入力ファイル

インストールされている実装とオプションは、配布版によって異なる場合があります。man trで現在のシステムの説明を確認してください。

使用例

小文字を大文字に

入力をパイプで渡し、結果を画面に出力します。

printf '%s\n' hello | tr '[:lower:]' '[:upper:]'

特定の文字を削除

-d は指定した文字を削除します。以下の \r はCR(復帰)で、ファイルにあるCRをすべて削除します。改行の一部ではないCRも消えるため、通常のCRLF改行のテキストに適用する意図が合っているかを確認してください。

tr -d '\r' < windows-lines.txt

繰り返し空白の圧縮

連続した空白文字を1つに減らします。タブと空白を同じ種類に統一するには、別途置換が必要です。

tr -s ' ' < notes.txt

文字単位の変換結果

trは標準入力の文字を1つずつ置換または削除します。次は英語の大文字を小文字に変換する例です。

printf 'HELLO 123\n' | tr '[:upper:]' '[:lower:]'

例の出力:

hello 123

数字と空白は変換対象ではないため、そのまま残ります。trにはファイルパスの引数がないため、ファイルを処理する際にはtr ... < オリジナル > 結果のようにリダイレクトします。マルチバイト文字の複雑な置換や単語・正規表現置換にはsedや他のテキスト処理ツールの方が適しています。

主なオプションと形式

オプション・形式 説明
-d 文字リスト1に該当する文字を削除します。
-s 繰り返された該当文字を1つに圧縮します。
-c 文字リスト1にない文字を選択します。
[:lower:] / [:upper:] 文字クラスで小文字・大文字の文字リストを表します。

使用する際の注意点

標準入力を読み、結果を標準出力へ送ります。tr ... < file > file のように入力と出力を同じ名前にすると、シェルが先に内容を空にするため、出力は別のファイルに保存してください。GNUのマニュアルは tr が完全に対応するのは安全な単一バイトのロケール(文字の解釈規則)だけとしています。LC_ALL=C はバイトを扱う規則を明確にしますが、日本語などのUTF-8文字を正しく置換する機能を追加するものではありません。

よくある質問

tr ファイル.txtのようにファイル名を指定できますか?

いいえ。ファイルの内容はtr ... < ファイル.txtのように標準入力として提供する必要があります。

公式ドキュメント

オプションの正確な動作や実装ごとの差異は、tr 関連の公式ドキュメントで確認できます。