tr - 文字を変換または削除する

スポンサーリンク

trコマンドは標準入力の文字をすべて別の文字に変換・削除し、標準出力へ書き出します。

用途として、大文字を小文字に変換したり、また逆に小文字を大文字に変換することが可能です。

スポンサーリンク

trコマンドの構文

trコマンドの基本的な構文

set1:変換前の文字の集合

set2:変換後の文字の集合

 

trコマンドの削除する場合の構文

set1:削除する文字の集合

 

 

 

trコマンドの利用例

文字の変換
(オプションなし)

trコマンドで文字の変換を行う場合は、2つの文字の集合を引数に取ります。最初の引数は変換前の文字の集合を表し、次の文字の集合は変換後の文字の集合を表します。それぞれの文字は、それぞれの文字の集合の順番通りに対応付けがされます。

コマンド例

test.txt

実行結果

 

変換前の文字の集合に同じ文字を用いた場合、変換される文字は変換後の文字の集合で最後に入力された文字になります。
コマンド例

実行結果

 

変換後の文字が変換前の文字より多い場合、変換前の文字に対応するものがない変換後の文字の末尾が切り捨てられます。

コマンド例

実行結果

 

変換前の文字が変換後の文字より多い場合は、GNU版のtrコマンドでは、変換後の文字の最後の文字が拡張されて、変換前の文字での多い部分が変換後の文字の最後の文字に対応します。この動作は-tオプションによって、変換前の文字の方を切り捨てて、多い部分については何もしないように変更することができます。

コマンド例

実行結果

 

 

 

指定した文字以外を指定
(-cオプション)

-cオプションは、trコマンドの一つ目の引数で指定した文字の集合を、指定した文字以外で指定することができます。

コマンド例

test.txt

実行結果

 

 

 

文字の削除
(-dオプション)

-dオプションを用いて、trコマンドを利用すると文字の削除を行うことができます。

コマンド例

test.txt

実行結果

 

 

 

繰り返された文字の圧縮
(-sオプション)

-sオプションを用いると繰り返された文字を一つにすることができます。

コマンド例

test.txt

実行結果

 

また、-sオプションを用いて2つ目の引数を入れると圧縮された文字を別の文字に変換することができます。

コマンド例

実行結果

 

 

 

-sオプションと-dオプションの同時使用

文字を削除する-dオプションと繰り返された文字を一つにする-sオプションを同時に使用するとtrコマンドの一つ目の引数が削除される文字に、2つ目の引数が圧縮する文字になります。

コマンド例

test.txt

実行結果

 

-dオプションと-sオプションを同時に用いて、さらに-cオプションを用いると削除する文字だけが指定した文字以外になります。
コマンド例

実行結果

 

 

 

変換後の文字の拡張を行わない
(-tオプション)

-tオプションは、変換前の文字が変換後の文字より多い場合に動作するオプションです。GNU版のtrコマンドの動作では変換後の文字が拡張され、変換前の文字の多い部分についてそれぞれ文字の対応付けが行われます。

-tオプションを用いると変換前の文字の多い部分については切り捨てて何も行わずに文字の変換が行います。

コマンド例

test.txt

実行結果

 

-tオプションがない場合は以下のようになります。
コマンド例

実行結果

 

 

 

trコマンドで利用できる文字セットについて

エスケープシーケンス

trコマンドではエスケープシーケンスを扱うことができます。バックスラッシュの後にある特定の文字は特定の意味を持つ文字を表し、それ以外の文字はそのままの文字として解釈されます。

ただし、エスケープシーケンスを扱う場合は、バックスラッシュがシェルに解釈できるようにシングルクォーテーションなどの引用符で文字列を囲む等の方法が必要にあります。

コマンド例は\141(aの文字)を\170(xの文字)に変換しています。

コマンド例

test.txt

実行結果

エスケープシーケンス表

文字 意味
\ooo 8進数での文字(ASCIIコード表を参照)
\a アラート
\b バックスペース
\f フォーム フィード
\n 改行
\r 復帰
\t 水平タブ
\v 垂直タブ
\\ バックスラッシュ

ASCIIコード表(参考) ▼表示

 

 

 

範囲

範囲は「a-z」のように文字と文字の間にハイフンを入れます。文字の範囲は文字コード表での番号で小さい数字から大きい数字になるように指定します。

コマンド例

test.txt

実行結果

 

 

 

変換後の文字の集合で同じ文字の繰り返し

'[c*]'(cは任意の文字)のように、同じ文字を変換後の文字の集合を記述するときに利用できる記法があります。'[c*]'は変換前の文字の集合を作成するのに必要なだけの繰り返しを意味します。'[c*]'は一つだけ利用できます。

また、'[c*n]'(cは任意の文字、nは繰り返しの回数)のように、同じ文字を繰り返すときに回数を指定することもできます。nは10進数で記述しますが、010のように0から記述すると8進数として解釈することもできます。

コマンド例

test.txt

実行結果

 

 

 

文字クラス

trコマンドは、文字クラスを用いて文字の種類を指定することができます。互換性などを意識するためにPOSIX準拠で利用する場合は、範囲ではなく文字クラスを利用することが推奨されます。

文字クラスは[:upper:]と[:lower:]以外は文字の順番が定められていません。そのため、基本的に変換後の文字の集合としてではなく、変換前の文字の集合として使います。

文字クラスの一覧

クラス 意味
[:alnum:] アルファベットと数字
[:alpha:] アルファベット
[:blank:] スペース・水平タブ等
[:cntrl:] 制御文字
[:digit:] 数字
[:graph:] 表示可能な文字(スペースなし)
[:lower:] アルファベット(小文字)
[:print:] 表示可能な文字(スペースあり)
[:punct:] 引用符・句読点・括弧・演算子等の記号
[:space:] スペース・水平タブ・垂直タブ等
[:upper:] アルファベット(大文字)
[:xdigit:] 16進数で利用される文字
0~9、A~F、a~f
[=c=] 等価クラス。cは任意の文字
アクセントのある文字(例:é)等で利用

 

GNU版のtrコマンドでは等価クラスは完全には実装されていないため、うまく動作しないかもしれません。

 

変換後の文字の集合として利用できる文字クラス[:upper:]と[:lower:]は、変換前の文字の集合が[:upper:]ならば、変換後の文字の集合が[:lower:]のように、それぞれ対応するように利用できます。

コマンド例と実行結果

 

trコマンドで基本的に[:upper:]と[:lower:]以外の文字クラスは2つ目の引数に現れないかもしれませんが、-dオプションと-sオプションを同時に利用するときは2つ目の引数にすべての文字クラスを利用することができます。

コマンド例

test.txt

実行結果

 

 

 

参考

GNU Coreutils: tr invocation