戻る

GNUのtextutils付属のtrコマンドのマニュアル。

================================
TR(1)                                                       TR(1)

名前
       tr - 文字の変換・削除や、連続する文字の圧縮を行う

書式
       tr  [-cdst ] [--complement] [--delete] [--squeeze-repeats]
       [--truncate-set1] SET1 [SET2]

       tr [--help] [--version]

説明
       tr は標準入力を標準出力にコピーし、その際に以下のうちの い
       ずれかを行う。

       o 文字を変換し、オプションで指定すればさらに連続する文字を
         圧縮 (squeeze) する。

       o 連続する文字を圧縮する。

       o 文字を削除する。

       o 文字を削除してから、連続する文字を圧縮する。

       SET1 および (与えられていれば) SET2 引き数は、文字の順序付
       きセットを定義する。これらの文字セットが入力に存在すると、
       tr はその文字に対して動作を行う。

オプション
       -c, --complement
              SET1 を、 SET1 自身の補集合 (SET1 に含まれない文 字
              すべて) で置き換える。

       -d, --delete
              SET1 にある入力文字を削除する。変換しない。

       -s, --squeeze-repeats
              同じ文字の繰り返しを 1 文字に置き換える。この操作は
              変換や削除のあとに行われる。 SET1 にある文字の繰 り
              返しを、その文字 1 文字に置き換える。

       -t, --truncate-set1
              変 換を行う前に、まず SET1 を SET2 の長さに切り詰め
              る。

       --help 標準出力に使用方法のメッセージを出力して正常終了 す
              る。

       --version
              標準出力にバージョン情報を出力して正常終了する。

文字セットの指定
       SET1  および SET2 引き数のフォーマットは正規表現と似たもの
       になっている。しかし正規表現そのものではなく、実は文字の並
       びに過ぎない。これらの文字列の中に記された文字は、ほとんど
       の場合はその文字自身を指す。文字列には便宜上以下のような短
       縮形を用いることもできる。ただし SET1 または SET2 のいずれ
       かにしか用いることのできないものもある (このようなものには
       注記がされている)。

   バックスラッシュを用いたエスケープ
              \a     Control-G

              \b     Control-H

              \f     Control-L

              \n     Control-J

              \r     Control-M

              \t     Control-I

              \v     Control-K

              \OOO   OOO  (1〜3 桁の 8 進数) によって指定される文
                     字

              \\     バックスラッシュ文字

   範囲指定
       `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 の同じ位置に指定されていなけ
       ればならない。この場合は大文字小文字が変換される。文字クラ
       ス 名 を以下に示す。これら以外の名前が指定された場合にはエ
       ラーとなる。

              alnum  英文字と数字

              alpha  英文字

              blank  水平方向の空白 (Horizontal whitespace)

              cntrl  制御文字

              digit  数字

              graph  印刷できる文字 (空白は含まない)

              lower  英小文字

              print  印刷できる文字 (空白も含む)

              punct  句読点

              space  水平および垂直方向の空白

              upper  英大文字

              xdigit 16 進数の文字

   等価クラス
       `[=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 にある文字を削除する。

       --squeeze-repeats (-s) オプションだけが指定された 場 合 に
       は、 tr は入力のうち、 SET1 にある文字の繰り返しを、その文
       字 1 文字に置き換える。

       --delete と --squeeze-repeats の両方のオプションが指定され
       た場合には、 tr はまず SET1 にある文字を削除し、残りのうち
       SET2 にある文字の繰り返しを圧縮する。

       --squeeze-repeats オプションは変換と共に用いることも で き
       る。 こ の 場 合には tr はまず変換を行い、残りの文字のうち
       SET2 にあるものを圧縮する。

       以下にこれらのオプションを組み合わせた利用例を示す:

       o 内容が 0 のバイトを削除する:

              tr -d '\000'

       o すべての単語をそれ自身のみからなる行に変換する。つまりア
       ルファベット文字、数字以外の文字を改行文字に変換し、改行文
       字の繰り返しを一つの改行文字に圧縮する:

              tr -cs '[a-zA-Z0-9]' '[\n*]'

       o 改行文字の繰り返しを一つの改行文字に変換する。

              tr -s '\n'

       o 文書中の同じ単語の連続を見つける。例えば "the the" の よ
       う に、 改行を挟んで単語をダブって書いてしまうことがよくあ
       る。以下の bourne シェルスクリプトは、まず句読点や空白の連
       続を改行に変換する。これによって、各「単語」は、それぞれ自
       分自身だけからなる行に置かれる。次に大文字を小文字に 変 換
       し、 最後に uniq(1) を -d オプションで起動して、連続した同
       じ単語だけを表示する。

              #!/bin/sh
              cat "$@" \
              | tr -s '[:punct:][:blank:]' '\n' \
              | tr '[:upper:]' '[:lower:]' \
              | uniq -d

移植性
       環境変数 POSIXLY_CORRECT を指定すると、 POSIX.2 との厳密な
       互換性をとるために、警告およびエラーメッセージのいくつかが
       出力されなくなる。指定しなければ、以下のような場合 に メッ
       セージが出る。

       1. --delete オプションが指定されているが --squeeze-repeats
          が指定されておらず、かつ SET2 が与えられている 場 合 に
          は、GNU  版 tr はデフォルトでは使用法のメッセージを表示
          して終了する。なぜならこのとき SET2 は利用されないか ら
          である。しかし POSIX 規格によれば、この場合は SET2 は単
          に無視されなければならない。引き数を黙って無視するの は
          良くない仕様だと思うのだが。

       2.  あ い ま いな 8 進数エスケープが指定された場合。例えば
          `\400' は実際には \40 と数字 0 の並びと解釈される。なぜ
          な ら 8 進数の 400 に対応するバイトは存在しないからであ
          る。

       GNU 版 tr は BSD や System V と互換ではない。例を 挙 げ れ
       ば、  POSIX   定義にある `[:alpha:]', `[=c=]', `[c*10]' と
       いった指定の解釈を止めさせるようなオプションは存在しない。
       また GNU 版 tr は内容が 0 のバイトを自動的には削除しない。
       一方これまでの UNIX 版では、このバイトを残す方法の方が存在
       しない。

注意
       プ ログラムのバグについては bug-textutils@gnu.org に報告し
       てください。
       man ページは Ragnar Hojland  Espinosa  
       が作成しました。

GNU textutils 2.0         15 August 1999                    TR(1)