[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
‘--delete’ (‘-d’) オプションのみが指定された場合、tr
は、
set1 に存在する文字が入力中にあれば、それを削除する。
‘--squeeze-repeats’ (‘-s’) オプションのみが指定され、置換が要求されていない場合、
tr
は、set1 に存在する文字が入力中に連続して現れるたびに、
その部分をただ 1 個のその文字に置き換える。
‘--delete’ と ‘--squeeze-repeats’ の両方が指定された場合、
tr
は、まず set1 を使って削除を行い、
その後で、残っている文字に対して、set2 を使って連続する同一文字の圧縮を行う。
‘--squeeze-repeats’ オプションは、置換の際に使用することもできる。
その場合、tr
は、まず置換を実行し、その後で、置換結果に対して、
set2 を使って連続する同一文字の圧縮を行う。
例をいくつか挙げて、オプションの様々な組み合わせを説明する。
tr -d '\0' |
tr -cs '[:alnum:]' '[\n*]' |
tr -s '\n' |
uniq
を
‘-d’ オプション付きで実行して、重複した単語のみを書き出すのである。
#!/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
を 3 個の文字としてではなく、‘a’…‘x’
という文字の範囲として解釈することになるからだ。
この問題を解決する方法の一つは、ハイフンを文字のリストの最後に置くことである。
tr -d axM- |
あるいは、‘--’ を使って、オプション処理はここで終わりと明示することもできる。
tr -d -- -axM |
より普遍的な方法は、等価クラスの記法 [=c=]
を、‘c’ を ‘-’ で
(あるいは、他の任意の文字で) 置き換えて使うことである。
tr -d '[=-=]axM' |
上記の例では、角カッコがシェルによって解釈されないように、 シングルクォートを使っていることに注意していただきたい。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on June 7, 2022 using texi2html 1.82.