|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > t > tr - コマンド (プログラム) の説明 tr - コマンド (プログラム) の説明 - Linux コマンド集 一覧表名前tr - 文字の変換・削除や、連続する文字の圧縮を行う 書式
tr
[
-cdst
][
--complement
][
--delete
][
--squeeze-repeats
][
--truncate-set1
]
SET1
[
SET2
]
説明
tr
は標準入力を標準出力にコピーし、その際に以下のうちのいずれかを行う。
SET1 および (与えられていれば) SET2 引き数は、 文字の順序付きセットを定義する。 これらの文字セットが入力に存在すると、 tr はその文字に対して動作を行う。 オプション
文字セットの指定SET1 および SET2 引き数のフォーマットは 正規表現と似たものになっている。しかし正規表現そのものではなく、 実は文字の並びに過ぎない。 これらの文字列の中に記された文字は、ほとんどの場合はその文字自身を指す。 文字列には便宜上以下のような短縮形を用いることもできる。 ただし SET1 または SET2 のいずれかにしか 用いることのできないものもある (このようなものには注記がされている)。 バックスラッシュを用いたエスケープ
範囲指定`M -N ' といった表記は、 M から N までのすべての文字を昇順に展開した文字列になる。 M は照合順序中で N の前になければならず、 これに反した場合はエラーとなる。 例えば `0-9' は`0123456789' を指定したのと同じことになる。 System V 版の tr では範囲を指定する際に角括弧 `[]' を用いるが、 GNU 版 tr ではこの形式はサポートしていない。 ただしこの形式における変換指定は SET1 と SET2 の間で角括弧が対応していればちゃんと動作する。 繰り返し文字SET2 における `[ C *N ] ' といった表記は N 個の文字 C に展開される。 したがって `[y*6]' は `yyyyyy' になる。 SET2 における `[C *]' は SET2 を SET1 と同じ長さにするために必要な個数の文字 C に展開される。 N が 0 ではじまる場合は 8 進数とみなされ、 それ以外の場合は 10 進数とみなされる。 文字クラス
`[:
CLASS
:]
' といった表記は、
あらかじめ定義された文字クラス CLASS
のすべての文字に展開される。
文字クラスには特定の順序は定義されていない。
ただし `upper' と `lower' クラスのみは例外で、昇順に展開される。
--delete
(
-d
)
および
--squeeze-repeats
(
-s
)の両方が指定された場合は、
SET2
にはどんな文字クラスでも用いることができる。
それ以外の場合は、 SET2
に指定できるのは `lower' および `upper' のみで、
しかもそれぞれに対応するクラス
(`lower' には `upper'、 `upper' には `lower') が
SET1
の同じ位置に指定されていなければならない。
この場合は大文字小文字が変換される。
文字クラス名を以下に示す。
これら以外の名前が指定された場合にはエラーとなる。
等価クラス`[= C =] ' といった表記は、 C と等価な文字に展開される。このとき順序は定義されない。 等価クラスは、英語以外のアルファベットをサポートするために 最近発明されたものである。 しかし現在のところこれらの定義や内容指定に標準的な方法はないようである。 したがって GNU 版 tr でも完全には実装されていない。 それぞれの文字の等価クラスはその文字からのみ構成されている。 したがってこの機能は現在のところ役に立たない。 変換
tr
は SET1
と SET2
の両方が指定されていて、
--delete
(
-d
)オプションが指定されていない場合には変換を行う。
tr
は入力のうち SET1
にある文字を
SET2
の対応する位置にある文字に変換する。
SET1
に無い文字はそのまま出力される。
もし文字が SET1
に 2 回以上現われ、
SET2
の対応する文字がすべて同じでない場合には、
最後の文字だけが使われる。例えば以下の二つのコマンドは等価である:
tr aaa xyz tr a z tr の良くある使い方としては、英小文字の大文字への変換があげられる。 いろいろなやり方が可能であるが、以下に例を 3 つ示す。 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ tr a-z A-Z tr '[:lower:]' '[:upper:]' tr が変換を行う際には、 SET1 と SET2 は通常同じ長さでなければならない。 SET1 が SET2 より短い場合には、 SET2 の尾部の余りは無視される。 逆に SET1 を SET2 より長く指定すると、動作は予測できなくなる。 POSIX.2 によれば、結果は定義されない。 このような場合、 BSD 版 tr では SET2 の足りない部分を最後の文字で埋め、 SET1 と同じ長さにする。 また System V 版 tr は SET1 の尾部を切り捨てて SET2 と同じ長さにする。 デフォルトでは GNU 版 tr は BSD 版 tr と同じように振る舞う。 また --truncate-set1 (-t ) オプションが指定された場合には、 GNU 版 tr は System V 版 tr のように振る舞う。このオプションは変換以外の点に関しては無視される。 System V 版 tr 的な振る舞いの下では、 BSD 版の有名な用法: tr -cs A-Za-z0-9 '\012' は使えなくなる。これはアルファベット文字および数字以外の文字を改行文字 に置換するものであるが、 System V では内容が 0 のバイト (SET1 の補集合の先頭要素) のみを変換することになる。 繰り返しの圧縮と削除
--delete
(
-d
)オプションだけが指定された場合は、
tr
は入力のうち SET1
にある文字を削除する。
tr -d '\000' » すべての単語をそれ自身のみからなる行に変換する。 つまりアルファベット文字、数字以外の文字を改行文字に変換し、 改行文字の繰り返しを一つの改行文字に圧縮する: tr -cs '[a-zA-Z0-9]' '[\n*]' » 改行文字の繰り返しを一つの改行文字に変換する。 tr -s '\n' » 文書中の同じ単語の連続を見つける。例えば "the the" のように、改行を挟んで単語をダブって書いてしまうことがよくある。 以下の bourne シェルスクリプトは、まず句読点や空白の連続を改行に変換する。 これによって、各「単語」は、それぞれ自分自身だけからなる行に置かれる。 次に大文字を小文字に変換し、最後に uniq (1) を -d オプションで起動して、連続した同じ単語だけを表示する。 #!/bin/sh cat "$@" \ | tr -s '[:punct:][:blank:]' '\n' \ | tr '[:upper:]' '[:lower:]' \ | uniq -d 移植性
環境変数
POSIXLY_CORRECT
を指定すると、 POSIX.2 との厳密な互換性をとるために、
警告およびエラーメッセージのいくつかが出力されなくなる。
指定しなければ、以下のような場合にメッセージが出る。
GNU 版 tr は BSD や System V と互換ではない。 例を挙げれば、 POSIX 定義にある `[:alpha:]', `[=c=]', `[c*10]' といった指定の解釈を止めさせるようなオプションは存在しない。 また GNU 版 tr は内容が 0 のバイトを自動的には削除しない。 一方これまでの UNIX 版では、このバイトを残す方法の方が存在しない。 注意
プログラムのバグについては bug-textutils@gnu.org に報告してください。
|
|