8.4.36 trコマンド(標準入力から入力された文字列を,1バイトごとに置換または削除しながら標準出力に出力する)
形式
- 形式1
-
tr [-cst] [--check-multi-byte] 文字列1 文字列2
- 形式2
-
tr -d [-c] [--check-multi-byte] 文字列1
- 形式3
-
tr -s [-c] [--check-multi-byte] 文字列1
- 形式4
-
tr -ds [-c] [--check-multi-byte] 文字列1 文字列2
機能
標準入力から入力された文字列を,1バイトごとに置換または削除しながら標準出力に出力します。
形式1でコマンドが指定された場合,標準入力から入力された文字列を置換して,その結果を標準出力に出力します。置換の際,標準入力の文字列に含まれる文字列1の1バイトごとの文字を,文字列2の1バイトごとの文字に置換します。文字列1が文字列2よりも長い場合,文字列2の最後の1バイトの文字が文字列1と同じ長さになるまで繰り返されているものと見なします。
形式2でコマンドが指定された場合,標準入力から入力された文字列に含まれる,文字列1の文字(1バイト単位)を削除して,その結果を標準出力に出力します。
形式3でコマンドが指定された場合,標準入力から入力された文字列を置換して,その結果を標準出力に出力します。置換の際,標準入力の文字列に,文字列1の文字(1バイト単位)が連続して含まれていた場合に,連続する同じ文字を1文字に圧縮します。
形式4でコマンドが指定された場合,標準入力から入力された文字列を削除および置換して,その結果を標準出力に出力します。削除の際,標準入力の文字列に含まれる,文字列1の文字(1バイト単位)を削除します。また,文字列1の文字を削除したあとの文字列に,文字列2の文字(1バイト単位)が連続して含まれていた場合に,連続する同じ文字を1文字に圧縮します。
引数
-c
- --complement
-
文字列1を文字列1の補集合(文字列1に含まれない文字すべて)で置換します。
-d
- --delete
-
標準入力の文字列から,文字列1にある入力文字を削除します。
-s
- --squeeze-repeats
-
すべての削除や置換が行われたあとの文字列に含まれる,連続する同じ文字(バイト単位)を1文字に圧縮します。置換する文字列は,形式1と形式4では文字列2,形式3では文字列1に指定した文字列(1バイト単位)です。
-t
- --truncate-set1
-
文字列1が文字列2よりも長い場合に,文字列1の文字を削除して,文字列2と同じ長さに切り詰めてから置換します。
- --check-multi-byte
-
文字列1または文字列2にマルチバイト文字が含まれている場合,エラーにします。
- 文字列1,文字列2
-
標準入力から入力された文字列に対して,置換または削除する対象の文字列を指定します。文字列は,1バイト単位で処理されます。
文字列1,文字列2の文字の集合を指定する場合,次の記述が利用できます。
記述形式
意味
\ooo
1~3桁の8進数で表されたASCIIコードの文字を指定します。
文字1-文字2
範囲指定。文字(1バイト)はASCII照合順序で指定します。
エスケープ文字
\a
アラート文字(ベル)
\b
バックスペース文字
\f
フォームフィード文字(改ページ)
\n
改行文字
\r
復帰文字
\t
タブ文字
\v
垂直タブ文字
[:文字クラス:]
文字列1および形式4の文字列2は以下の文字クラスを指定できます。形式1の文字列2は,次の条件をすべて満たしたときに,lowerまたはupperが指定できます。
・-cオプションなし
・文字列1の,文字列2と同じ位置にlowerまたはupperを指定します。
alnum
英数字
alpha
英字
blank
空白文字(空白とタブ)
cntrl
制御文字
digit
数字
graph
表示可能文字(スペースは含まない)
lower
英小文字
print
表示可能文字(スペースを含む)
punct
句読点文字
space
空白文字
upper
英大文字
xdigit
16進数での数字
[#*n]
#で指定した文字(1バイト)をn個指定したと同じ意味です。形式1の文字列2で使用します。nを省略した場合または0の場合,文字列2が文字列1と同じ長さの値として解釈され,後ろに指定した文字は無視されます。nが0で始まる場合,8進数として解釈され,その他は10進数と解釈されます。
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了。 |
1以上 |
エラー終了。 |
注意事項
-
この機能は1バイトごとに,文字を置換または削除するため,文字列1,文字列2,または標準入力から入力された文字列にマルチバイト文字が含まれている場合,予期しない出力結果になることがあります。マルチバイト文字を含む文字列を置換または削除する場合は,sedコマンドを使用してください。
-
入力文字が[CR]+[LF]の改行の場合,[CR]および[LF]それぞれが処理の対象になります。
使用例
- 例1 文字列1,文字列2の指定に従って,標準入力から入力された文字列を置換します。この例では,括弧の種類が異なる文字列を[]に統一しています。
-
file1の内容
[apple],{banana} [orange],<peach>,{cherry}
コマンドの実行結果
$ tr '{}<>' '[][]' < file1 [apple],[banana] [orange],[peach],[cherry]
- 例2 文字列1の補集合を文字列2で置換し,連続している文字を1文字に圧縮します。この例では,標準入力から入力された文字列から英文字を洗い出しています。
-
file1の内容
[apple],{banana} [orange],<peach>,{cherry}
コマンドの実行結果
$ tr -s -c '[:alpha:]' '[\n*]' < file1 apple banana orange peach cherry
- 例3 文字列1の指定に従って,標準入力から入力された文字列を削除します。この例では,括弧を削除しています。
-
file1の内容
[apple],{banana} [orange],<peach>,{cherry}
コマンドの実行結果
$ tr -d '{}<>[]' < file1 apple,banana orange,peach,cherry
- 例4 文字列1,文字列2の指定に従って,標準入力から入力された文字列を置換し,連続する文字を圧縮します。この例では,括弧を”,”に置き換え,”,”を1文字に圧縮しています。
-
file1の内容
[apple],{banana} [orange],<peach>,{cherry}
コマンドの実行結果
$ tr -s '{}<>[]' ','< file1 ,apple,banana, ,orange,peach,cherry,
- 例5 文字列1に従って,標準入力から入力された文字列を削除し,文字列2に従って連続する文字を圧縮します。この例では,括弧を削除し,”,”を圧縮しています。
-
file1の内容
[apple],{banana} [orange],<>,{cherry}
コマンドの実行結果
$ tr -ds '{}<>[]' ','< file1 apple,banana orange,cherry
- 例6 文字列1を文字列2の長さに切り詰め,置換します。この例では,括弧“{”と“}”を”[”と”]”に置換します。”<”と”>”は,置換しません。
-
file1の内容
[apple],{banana} [orange],<peach>,{cherry}
コマンドの実行結果
$ tr -t '{}<>' '[]'< file1 [apple],[banana] [orange],<peach>,[cherry]