tr 文字を置き換える、または削除する
tr [オプション] 文字集合1 [文字集合2]試してみる
tr a-z A-Z < greet.txt小文字を大文字に置き換えます。tr は標準入力しか読めないので < でファイルを渡します。
tr '[:upper:]' '[:lower:]' < greet.txt文字クラスで、大文字を小文字に置き換えます。
tr -d 'l' < greet.txtl をすべて削除します。
tr -s ' ' < spaces.txt連続した空白を1つにまとめます。
tr -d '\r' < win.txt | od -c | head -n 2Windows形式の改行から CR を取り除き、od -c で確かめます。
echo 'a,b,c' | tr ',' '\n'カンマを改行に置き換え、1項目1行にします。
主なオプション
-d | 指定した文字を削除する |
|---|---|
-s | 連続する同じ文字を1つにまとめる |
-c | 指定した文字以外を対象にする(補集合) |
-t | 文字集合1を文字集合2の長さに切り詰めてから置き換える |
解説
基本
tr は、標準入力から読んだ文字を1文字ずつ置き換えて、標準出力に書きます。ファイル名を引数で渡すことはできません。tr ... < ファイル か、パイプで入力します。
1文字ずつの対応
tr abc xyz は、a を x に、b を y に、c を z に置き換えます。文字列そのものの置き換え(foo を bar にする)はできません。それは sed の仕事です。
文字の範囲とクラス
a-z のような範囲のほか、[:upper:](大文字)、[:lower:](小文字)、[:digit:](数字)、[:space:](空白類)などの文字クラスが使えます。シェルに解釈されないよう、クォートで囲みます。
削除とまとめ
-d は文字を消し、-s は連続した同じ文字を1つにします。-s は空白の整理によく使います。-c は「指定した文字以外」の意味で、tr -cd '0-9' なら数字だけが残ります。
特殊な文字
改行は \n、タブは \t、CRは \r と書けます。Windows由来のファイルの \r を取り除くのによく使います。