UNIX/Linuxの部屋 trコマンドの使い方


※空白区切りで AND 検索 (例:「ファイル 削除」)

コマンド tr 文字の置換を行う

最終更新


tr コマンドは、文字列の置換や削除を行うコマンドである。UNIX・Linux いずれも利用可能なコマンドである。

ファイル sample.txt の 'a' を 'b' に置換するには、
% tr a b < sample.txt
とする。また、
% tr abc def < sample.txt
は、'a' を 'd' に、'b' を 'e' に、'c' を 'f' に置換して表示する。'abc' を 'def' に置換するのではないことに注意。

以下のように a-z などと範囲指定することもできる。
% tr 'a-z' 'A-Z' < file
⇒ 小文字を大文字に変える
% tr 'A-Za-z' 'a-zA-Z' < file
⇒ 小文字を大文字に、大文字を小文字に変換する
% tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ < file
⇒ 小文字を大文字に変換する。このように範囲指定せず、全文字を羅列してもよい。

`\ddd' という形式は、8進数のキャラクタコードを表す。例えば Mac のファイルは改行コードが 0x0D (8進で 015) だが、これを UNIX の改行コード 0x0A (8進で 012) に変換するには、
% tr '\015' '\012' < sample.mac > sample.unix
とすればよい。`\' がシェルに解釈されないように '' で囲むか、重ねて \\ と書くこと。
% tr '\015' '\012' (OK)
% tr \\015' \\012 (OK)
% tr \015 \012 (ダメ)
なお、\r・\n・\t・\b などのコントロールコードを記述することもできる。

tr コマンドのオプション
-d または --delete オプションを付けると、文字を削除することができる。
Windows・DOS の改行コード 0x0D 0x0A を 0x0A に変換するには、
% tr -d '\r' < sample.dos > sample.unix
と書くことができる (改行コード以外の場所に 0x0D が現われない場合)。なお、これは
% tr -d '\015' < sample.dos > sample.unix
と等価である。

-c は、「〜以外」を表す。
例えば
% tr -dc 0-9 < /dev/urandom | fold -w 20 | head -1
は、/dev/urandom から 0-9 以外を削除 (=0-9 のみ残す) する。この行全体では20個のランダムな数字を表示する。

-s または --squeeze-repeats オプションを付けると、連続する文字を 1つの文字にまとめる。
% tr -s ' ' < file
→ 連続する空白をひとつにまとめる
% tr -s '\n' < file
→ 連続する改行をひとつにまとめる (=空行削除の効果がある)

1文字でなく、文字列の置換を行いたいなら、sed や perl を使うこと。また、perl だと強力な正規表現が使えるので、tr でできることでも、全て perl でやってしまうのもよいかもしれない。
>> Linuxオンラインマニュアル(man) Linux tr(1)
>> Solaris10オンラインマニュアル(man) Solaris10 tr(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD tr(1)


頑張って書いたおすすめコンテンツ!