[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
このコマンドは,個別に文字を処理します.
9.1 tr : 文字の変換,圧縮,そして/または,削除 | Translate, squeeze, and/or delete characters. | |
9.2 expand : タブをスペースに変換 | Convert tabs to spaces. | |
9.3 unexpand : スペースをタブに変換する | Convert spaces to tabs. |
tr
: 文字の変換,圧縮,そして/または,削除 概要です.
tr [option]… set1 [set2] |
tr
は標準入力を標準出力にコピーし,そのとき以下の処理の一つを実行
します.
変換と,追加で結果の繰り返し文字の圧縮.
繰り返し文字の圧縮.
文字の削除.
文字の削除後,結果から繰り返し文字の圧縮.
set1と(与えられている場合)set2引数は,文字の順序を持つ文字を
定義し,以下のset1とset2を参照します.これらの設定は,
tr
が処理する入力文字です.`--complement' (`-c')オプショ
ンは,set1をその補語(set1にない全ての文字)に置換します.
9.1.1 文字セットの指定 | Specifying sets of characters. | |
9.1.2 変換 | Changing one characters to another. | |
9.1.3 繰り返しの圧縮と削除 | Squeezing repeats and deleting. | |
9.1.4 警告メッセージ | Warning messages. |
set1とset2の引数の書式は,正規表現の書式に似ています.しかし 正規表現ではなく,文字のリストのみです.これらの文字列のほとんどの文字は 単にその文字自身を表すが,利便性のため,文字列には以下でリストアップされ た速記を含むことができます.そのうち,以下で注意するset1または set2のみでしか利用できないものもあります.
以下でリストアップされていない,文字が続くバックスラッシュは,エラーメッ セージを発生します.
Control-G.
Control-H.
Control-L.
Control-J.
Control-M.
Control-I.
Control-K.
oooで与えられる値の文字で,1から3桁までの8進数.
バックスラッシュ.
表記方法の`m-n'は,mからnまで昇順に,全ての
文字に展開されます.mは,対照でnの前であるべきです.そうでな
い場合,結果としてエラーとなります.例としては,`0-9'は
`0123456789'と同じです.GNU tr
は,範囲を囲む角括弧を使用する
System V 構文をサポートしませんが,その書式で指定された変換は,
set1のカッコがset2のカッコと同じように対応する限り働き
ます.
set2での`[c*n]'の表記は,文字cのn個の コピーに展開されます.このため,`[y*6]'は`yyyyyy'と同じです. set2での`[c*]'の表記は,set2をset1と同じ長 さにするのに必要なだけ,cの多くのコピーに展開されます.nが `0'で始まる場合は8進数に,それ以外では10進数に解釈されます.
`[:class:]'の表記は,(あらかじめ定義された)クラスclass
にある全ての文字に展開されます.文字は,特定の順序で展開されませんが,
upper
とlower
クラスは,昇順に展開されます.`--delete'
(`-d')と`--squeeze-repeats' (`-s')オプションが両方与えら
れた場合,あらゆる文字クラスはset2で使用されるはずです.それ以外の
場合,文字クラスlower
とupper
は,set2に適用され,そし
てそれは,対応する(それぞれupper
とlower
の)文字クラスは
set1の位置に関連して同じものが指定されている場合のみです.こうする
ことで,大文字小文字の変換を指定します.クラス名は以下で与えられます.無
効なクラス名が与えられた場合,結果としてエラーとなります.
alnum
文字と数字.
alpha
文字.
blank
水平方向の空白.
cntrl
コントロール文字.
digit
数字.
graph
スペースを含まない,印刷可能な文字.
lower
小文字.
print
スペースを含む,印刷可能な文字.
punct
句読点文字.
space
水平垂直の空白.
upper
大文字.
xdigit
16進数の数字.
構文`[=c=]'は,cと等価な文字の全てに,特定の順序を持た
ずに展開されます.等価なクラスは,英語以外のアルファベットをサポートする
目的で,比較的最近発明されました.しかし,それらの定義や内容を決定する標
準的な方法はなさそうです.それゆえ,GNU tr
では,完全には実装され
ていません.それぞれの文字の等価クラスは,その文字からのみ構成されていて,
特定の利用価値はありません.
set1とset2の両方が与えられ,`--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
が変換を実行しているとき,set1とset2は,通常同じ長
さです.set1がset2より短い場合,set2の終りの余分な文字
は無視されます.
一方,set1をset2より大きくすることは移植性がありません.
POSIX.2は,その結果は未定義だと述べています.この場合,BSD
tr
は,set2を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' |
それは,全ての英数字を改行に変換する代わりに,(set1の補語の最初の 要素)ゼロバイトのみ変換されるためです.
`--delete' (`-d')オプションのみ与えられたとき,tr
は,
set1にあるあらゆる入力文字を削除します.
`--squeeze-repeats' (`-s')オプションのみ与えられたとき,
tr
は,set1にある,それぞれの入力の繰り返される文字の並びを,
その文字の単一の発生(訳注:1つの文字)に置換します.
`--delete'と`--squeeze-repeats'の両方が与えられた場合,
tr
は,最初にset1を用いて削除を実行し,set2を用いて残
りの文字から繰り返しを圧縮します.
`--squeeze-repeats'オプションは,変換時にも利用でき,その場合,
tr
は,最初に変換を実行し,set2を用いて残りの文字から繰り返
しを圧縮します.
ここに,オプションの様々な組合せの表現例をいくつかあげます.
全てのゼロバイトを削除.
tr -d '\000' |
全ての単語を独自の行にします.これは,全ての非英数文字を改行に変換し,繰 り返される改行となるそれぞれの文字列を単一の改行に圧縮します.
tr -cs 'a-zA-Z0-9' '[\n*]' |
繰り返される改行のそれぞれの並びを,単一の改行に変換します.
tr -s '\n' |
ドキュメントで単語の2重の出現を見付けます.例えば,人々は,改行で分かれ
ている複製された単語で,"the the"と書くこともよくあります.以下の
bourneシェルスクリプトは,最初に句読点と空白文字の並びを単一の改行文字に
変換する動作を行います.それはそれぞれの"単語"を単独行に書きます.次に
それは,全ての大文字を小文字に置き換え,最後に,複製が隣接している単語の
みを出力するために,uniq
を`-d'オプションで実行します.
#!/bin/sh cat "$@" \ | tr -s '[:punct:][:blank:]' '\n' \ | tr '[:upper:]' '[:lower:]' \ | uniq -d |
環境変数POSIXLY_CORRECT
を設定すると,POSIX.2を厳密に遵守する
ため,以下の警告とエラーのメッセージをオフにします.それ以外の場合,以下
の診断が発生されます.
`--delete'オプションが与えられているが,`--squeeze-repeats'が
与えられておらず,set2が与えられているとき,GNU tr
は,
set2が使用されないため,デフォルトで使用方法のメッセージを出力し終
了します.POSIX指定は,この場合set2は無視されるはずだと述べて
います.黙って引数を無視するのは悪い考えです.
曖昧な8進数のエスケープが与えられたときです.例えば`\400'は,8進数 の400の値が単一バイトに適さないので,実際には`0'が後置された `\40'になります.
GNU tr
は,BSDやSystem Vとの完全な互換性を提供しません.例えば,
POSIXの概念`[:alpha:]',`[=c=]'と,`[c*10]'の解釈を
利用不可にすることはできません.また,GNU tr
は,ゼロバイトを保護
する方法を提供できない伝統的なUnixバージョンと異なり,ゼロバイトを自動的
に削除できません.
expand
: タブをスペースに変換 expand
は,与えられたそれぞれのfile,または,与えられない場
合や`-'のfileの場合は標準入力の内容を,タブ文字を適切な数のス
ペースに変換して,標準出力に書き出します.概要です.
expand [option]… [file]… |
デフォルトで,expand
は全てのタブをスペースに変換します.それは全
ての出力でバックスペース文字を維持します.それらはタブ計算に対し,列の数
を減少させます.デフォルトの動作は`-8'(タブをそれぞれ8列に設定する)
と同じです.
プログラムは,以下のオプションを受け入れます.共通のオプション,も参 照してください.
1つのタブストップのみ与えられた場合,タブをtab1個の別々のスペース (デフォルトで8)に設定します.それ以外の場合,タブをtab1, tab2,… (0から番号付けされる)列に設定し,与えられた最後のタ ブストップ以降のあらゆるタブを単一のスペースで置換します.タブストップが `-t'や`--tabs'オプションで指定された場合,それらは空白およびカ ンマで分けられます.
それぞれの行の最初のタブ(前にあるものが全て非スペース文字や非タブ文字と なるもの)をスペースに変換します.
unexpand
: スペースをタブに変換する unexpand
は,与えられたそれぞれのfile,または与えられない場
合や`-'のfileに対しては標準入力の内容を,2つ以上のスペースや
タブ文字の文字列を,必要とされる多くのスペースと同等の,続けることが可能
な多くのタブに変換しながら,内容を標準出力に書き出します.概要です.
unexpand [option]… [file]… |
デフォルトで,unexpand
は,最初のスペースとタブ(前にあるものが全て
非スペース文字や非タブ文字となるもの)のみを,ぞれぞれの行で変換します.
それは,出力でバックスペース文字を維持します.タブの計算に対し,列の数を
少なくします.デフォルトで,タブは8列毎に設定されます.
プログラムは以下のオプションを受け入れます.共通のオプション,も参照 してください.
1つのタブストップのみ与えられた場合,タブを,デフォルトの8の代わりに,そ れぞれtab1スペースに設定します.それ以外の場合,タブをtab1列, tab2列,… (0から番号付けされる)に設定し,与えられたタブストッ プ以降のスペースタブは,変更されずに残ります.タブストップが`-t'や `--tabs'オプションで指定された場合,それらは空白とカンマで分けられ ます.オプションは暗黙に`-a'オプションを指定します.
最初のものだけでなく,全ての2つ以上のスペースやタブをタブに変換します.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.