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

スポンサーリンク

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

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

trコマンドの構文

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

set1:変換前の文字の集合

set2:変換後の文字の集合

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

set1:削除する文字の集合

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

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

コマンド例

test.txt

実行結果

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

コマンド例

実行結果

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

コマンド例

実行結果

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

コマンド例

実行結果

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

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

コマンド例

実行結果

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

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

コマンド例

実行結果

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

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

コマンド例

実行結果

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

コマンド例

実行結果

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

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

コマンド例

実行結果

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

コマンド例

実行結果

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

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

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

コマンド例

実行結果

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

コマンド例

実行結果

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

エスケープシーケンス

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

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

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

コマンド例

実行結果

エスケープシーケンス表

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

ASCIIコード表

10進8進16進文字
000000NUL
100101SOH
200202STX
300303ETX
400404EOT
500505ENQ
600606ACK
700707BEL
801008BS
901109HT
100120ALF
110130BVT
120140CFF
130150DCR
140160ESO
150170FSI
1602010DLE
1702111DC1
1802212DC2
1902313DC3
2002414DC4
2102515NAK
2202616SYN
2302717ETB
2403018CAN
2503119EM
260321ASUB
270331BESC
280341CFS
290351DGS
300361ERS
310371FUS
3204020
3304121!
3404222"
3504323#
3604424$
3704525%
3804626&
3904727'
4005028(
4105129)
420522A*
430532B+
440542C,
450552D-
460562E.
470572F/
48060300
49061311
50062322
51063333
52064344
53065355
54066366
55067377
56070388
57071399
580723A:
590733B;
600743C<
610753D=
620763E>
630773F?
6410040@
6510141A
6610242B
6710343C
6810444D
6910545E
7010646F
7110747G
7211048H
7311149I
741124AJ
751134BK
761144CL
771154DM
781164EN
791174FO
8012050P
8112151Q
8212252R
8312353S
8412454T
8512555U
8612656V
8712757W
8813058X
8913159Y
901325AZ
911335B[
921345C\
931355D]
941365E^
951375F_
9614060`
9714161a
9814262b
9914363c
10014464d
10114565e
10214666f
10314767g
10415068h
10515169i
1061526Aj
1071536Bk
1081546Cl
1091556Dm
1101566En
1111576Fo
11216070p
11316171q
11416272r
11516373s
11616474t
11716575u
11816676v
11916777w
12017078x
12117179y
1221727Az
1231737B{
1241747C|
1251757D}
1261767E~
1271777FDEL

範囲

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

コマンド例

実行結果

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

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

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

コマンド例

実行結果

文字クラス

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は任意の文字
アクセントのある文字(例:é)等で利用

等価クラスはうまく動作しない可能性があります。

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

コマンド例と実行結果

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

コマンド例

実行結果

参考

GNU Coreutils: tr invocation