[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

9. 文字の処理

このコマンドは,個別に文字を処理します.


9.1 tr: 文字の変換,圧縮,そして/または,削除

概要です.

 
tr [option]… set1 [set2]

trは標準入力を標準出力にコピーし,そのとき以下の処理の一つを実行 します.

set1と(与えられている場合)set2引数は,文字の順序を持つ文字を 定義し,以下のset1set2を参照します.これらの設定は, trが処理する入力文字です.`--complement' (`-c')オプショ ンは,set1をその補語(set1にない全ての文字)に置換します.


9.1.1 文字セットの指定

set1set2の引数の書式は,正規表現の書式に似ています.しかし 正規表現ではなく,文字のリストのみです.これらの文字列のほとんどの文字は 単にその文字自身を表すが,利便性のため,文字列には以下でリストアップされ た速記を含むことができます.そのうち,以下で注意する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'と同じです.GNU trは,範囲を囲む角括弧を使用する System V 構文をサポートしませんが,その書式で指定された変換は, set1のカッコがset2のカッコと同じように対応する限り働き ます.

繰り返される文字

set2での`[c*n]'の表記は,文字cn個の コピーに展開されます.このため,`[y*6]'は`yyyyyy'と同じです. set2での`[c*]'の表記は,set2set1と同じ長 さにするのに必要なだけ,cの多くのコピーに展開されます.nが `0'で始まる場合は8進数に,それ以外では10進数に解釈されます.

文字クラス

`[:class:]'の表記は,(あらかじめ定義された)クラスclass にある全ての文字に展開されます.文字は,特定の順序で展開されませんが, upperlowerクラスは,昇順に展開されます.`--delete' (`-d')と`--squeeze-repeats' (`-s')オプションが両方与えら れた場合,あらゆる文字クラスはset2で使用されるはずです.それ以外の 場合,文字クラスlowerupperは,set2に適用され,そし てそれは,対応する(それぞれupperlowerの)文字クラスは set1の位置に関連して同じものが指定されている場合のみです.こうする ことで,大文字小文字の変換を指定します.クラス名は以下で与えられます.無 効なクラス名が与えられた場合,結果としてエラーとなります.

alnum

文字と数字.

alpha

文字.

blank

水平方向の空白.

cntrl

コントロール文字.

digit

数字.

graph

スペースを含まない,印刷可能な文字.

lower

小文字.

print

スペースを含む,印刷可能な文字.

punct

句読点文字.

space

水平垂直の空白.

upper

大文字.

xdigit

16進数の数字.

等価なクラス

構文`[=c=]'は,cと等価な文字の全てに,特定の順序を持た ずに展開されます.等価なクラスは,英語以外のアルファベットをサポートする 目的で,比較的最近発明されました.しかし,それらの定義や内容を決定する標 準的な方法はなさそうです.それゆえ,GNU trでは,完全には実装され ていません.それぞれの文字の等価クラスは,その文字からのみ構成されていて, 特定の利用価値はありません.


9.1.2 変換

set1set2の両方が与えられ,`--delete' (`-d')オプ ションが与えられていない場合,trは変換を実行します.trは, set1にある入力のぞれぞれの文字を,対応するset2の文字に変換し ます.set1に無い文字は,そのまま変換されず通過します.set1の 文字が1回以上現われ,set2の対応する文字が全て同じではない場合,最 後の1つのみ使用されます.例えば,以下の2つのコマンドは等価です.

 
tr aaa xyz
tr a z

trの一般的な使用法は,小文字を大文字に変換することです.これは多 くの方法で行うことができます.その3つを以下に書きます.

 
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a-z A-Z
tr '[:lower:]' '[:upper:]'

trが変換を実行しているとき,set1set2は,通常同じ長 さです.set1set2より短い場合,set2の終りの余分な文字 は無視されます.

一方,set1set2より大きくすることは移植性がありません. POSIX.2は,その結果は未定義だと述べています.この場合,BSD trは,set2set2の最後文字で必要なだけ繰り返すことで set1の長さに引き延ばします.System V trは,set1set2の長さに切り詰めます.

デフォルトで,GNU trはBSD trのようにこの状態を扱います. `--truncate-set1' (`-t')オプションが与えられた場合,GNU trはSystem V trのようにこの状態を扱います.このオプション は,変換以外の処理では無視されます.

この場合,System V trのように動作させると,比較的一般的なBSDの表 現は壊れます.

 
tr -cs A-Za-z0-9 '\012'

それは,全ての英数字を改行に変換する代わりに,(set1の補語の最初の 要素)ゼロバイトのみ変換されるためです.


9.1.3 繰り返しの圧縮と削除

`--delete' (`-d')オプションのみ与えられたとき,trは, set1にあるあらゆる入力文字を削除します.

`--squeeze-repeats' (`-s')オプションのみ与えられたとき, trは,set1にある,それぞれの入力の繰り返される文字の並びを, その文字の単一の発生(訳注:1つの文字)に置換します.

`--delete'と`--squeeze-repeats'の両方が与えられた場合, trは,最初にset1を用いて削除を実行し,set2を用いて残 りの文字から繰り返しを圧縮します.

`--squeeze-repeats'オプションは,変換時にも利用でき,その場合, trは,最初に変換を実行し,set2を用いて残りの文字から繰り返 しを圧縮します.

ここに,オプションの様々な組合せの表現例をいくつかあげます.


9.1.4 警告メッセージ

環境変数POSIXLY_CORRECTを設定すると,POSIX.2を厳密に遵守する ため,以下の警告とエラーのメッセージをオフにします.それ以外の場合,以下 の診断が発生されます.

  1. `--delete'オプションが与えられているが,`--squeeze-repeats'が 与えられておらず,set2が与えられているとき,GNU trは, set2が使用されないため,デフォルトで使用方法のメッセージを出力し終 了します.POSIX指定は,この場合set2は無視されるはずだと述べて います.黙って引数を無視するのは悪い考えです.

  2. 曖昧な8進数のエスケープが与えられたときです.例えば`\400'は,8進数 の400の値が単一バイトに適さないので,実際には`0'が後置された `\40'になります.

GNU trは,BSDやSystem Vとの完全な互換性を提供しません.例えば, POSIXの概念`[:alpha:]',`[=c=]'と,`[c*10]'の解釈を 利用不可にすることはできません.また,GNU trは,ゼロバイトを保護 する方法を提供できない伝統的なUnixバージョンと異なり,ゼロバイトを自動的 に削除できません.


9.2 expand: タブをスペースに変換

expandは,与えられたそれぞれのfile,または,与えられない場 合や`-'のfileの場合は標準入力の内容を,タブ文字を適切な数のス ペースに変換して,標準出力に書き出します.概要です.

 
expand [option]… [file]…

デフォルトで,expandは全てのタブをスペースに変換します.それは全 ての出力でバックスペース文字を維持します.それらはタブ計算に対し,列の数 を減少させます.デフォルトの動作は`-8'(タブをそれぞれ8列に設定する) と同じです.

プログラムは,以下のオプションを受け入れます.共通のオプション,も参 照してください.

` -tab1[,tab2]…'
` -t tab1[,tab2]…'
` --tabs=tab1[,tab2]…'

1つのタブストップのみ与えられた場合,タブをtab1個の別々のスペース (デフォルトで8)に設定します.それ以外の場合,タブをtab1tab2,… (0から番号付けされる)列に設定し,与えられた最後のタ ブストップ以降のあらゆるタブを単一のスペースで置換します.タブストップが `-t'や`--tabs'オプションで指定された場合,それらは空白およびカ ンマで分けられます.

` -i'
` --initial'

それぞれの行の最初のタブ(前にあるものが全て非スペース文字や非タブ文字と なるもの)をスペースに変換します.


9.3 unexpand: スペースをタブに変換する

unexpandは,与えられたそれぞれのfile,または与えられない場 合や`-'のfileに対しては標準入力の内容を,2つ以上のスペースや タブ文字の文字列を,必要とされる多くのスペースと同等の,続けることが可能 な多くのタブに変換しながら,内容を標準出力に書き出します.概要です.

 
unexpand [option]… [file]…

デフォルトで,unexpandは,最初のスペースとタブ(前にあるものが全て 非スペース文字や非タブ文字となるもの)のみを,ぞれぞれの行で変換します. それは,出力でバックスペース文字を維持します.タブの計算に対し,列の数を 少なくします.デフォルトで,タブは8列毎に設定されます.

プログラムは以下のオプションを受け入れます.共通のオプション,も参照 してください.

` -tab1[,tab2]…'
` -t tab1[,tab2]…'
` --tabs=tab1[,tab2]…'

1つのタブストップのみ与えられた場合,タブを,デフォルトの8の代わりに,そ れぞれtab1スペースに設定します.それ以外の場合,タブをtab1列, tab2列,… (0から番号付けされる)に設定し,与えられたタブストッ プ以降のスペースタブは,変更されずに残ります.タブストップが`-t'や `--tabs'オプションで指定された場合,それらは空白とカンマで分けられ ます.オプションは暗黙に`-a'オプションを指定します.

` -a'
` --all'

最初のものだけでなく,全ての2つ以上のスペースやタブをタブに変換します.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.