次: Warnings in tr, 前: Translating, 上: tr invocation
--delete (-d)オプションのみ与えられたとき, trは,set1にあるあらゆる入力文字を削除します.
--squeeze-repeats (-s)オプションのみ与えられたとき, trは,set1にある,それぞれの入力で繰り返される文字の並 びを,その文字が一度だけ表れるように置換します.
--deleteと--squeeze-repeatsの両方が与えられた場合, trは,最初にset1を用いて削除を実行し,set2を用い て残りの文字から繰り返しを圧縮します.
--squeeze-repeatsオプションは,変換時にも利用でき,その場合, trは,最初に変換を実行し,set2を用いて残りの文字から繰 り返しを圧縮します.
ここに,オプションの様々な組合せの表現例をいくつかあげます.
tr -d '\000'
tr -cs '[:alnum:]' '[\n*]'
tr -s '\n'
#!/bin/sh cat "$@" \ | tr -s '[:punct:][:blank:]' '\n' \ | tr '[:upper:]' '[:lower:]' \ | uniq -d
tr -d axM
しかし,これらの文字の一つが`-'のとき,`-'には特別な意味があ
るので,ちょっとトリッキーになります.上記と同じ作業を実行し,さらにす
べての`-'文字を削除するため,tr -d -axM
を試してみるかもし
れませんが,trは-aをコマンドラインオプションと解釈
しようとするので失敗するでしょう.代わりに,文字列の間にハイフンを
tr -d a-xM
のように書いてみても,trはa-x
を三文
字ではなく`a'...`x'の範囲として解釈するので動作しません.
問題を解決する方法の一つは,文字のリストの最後にハイフンを書くことです.
tr -d axM-
より一般的に,文字クラスの表記[=c=]
を使用し,`-'(または,
任意の文字)を`c'の位置に書きます.
tr -d '[=-=]axM'
上記の例で使用しているシングルクオートは,角括弧をシェルが解釈すること を防ぎます.