trコマンド
- 文字を置換する
- 大文字/小文字を変換する
- 改行を除去する
- 固定長のデータをタブ区切りに変換する/カンマ区切りに変換する
trコマンド概要
「tr」は、文字を置き換えるためのコマンドです。指定した文字を別の文字に置き換えたり、指定した文字を削除したり、文字が連続している場合には1つにまとめたりすることもできます。
ですが、sedでもっと細かく制御できるので、trは「改行を除去する」ためのコマンドに成り果ててしまいました。ここでは改行を除去することだけにフォーカスしてご説明します。
trコマンドの書式
tr [オプション] 文字セット1 [文字セット2]
trコマンドの主なオプション
| オプション | 意味 | 
|---|---|
| -d | ‘文字’を削除する | 
trコマンド詳細説明
文字を置換する
sedを使いましょう。
$ tr 012 abc
- ヒント
- 012 という文字列を置き換えるのではなく、0をaに、1をbに、2をcに置き換えます。
大文字/小文字を変換する
sedを使いましょう。
大文字/小文字を変換する
$ tr ABC abc
- ヒント
- ABC という文字列を置き換えるのではなく、Aをaに、Bをbに、Cをcに置き換えます。
また、文字を範囲で指定することも可能です。「tr A-Z a-z」で「A」は「a」に、「B」は「b」に……と対応する文字に置き換えられます。
$ tr A-Z a-z
改行を除去する
「-d」オプションで、指定した文字を削除することができます。
ファイル中の改行を除去
$ cat sample.txt | tr -d '\n' > 出力ファイル名
文字列中の改行を除去
$ echo "$string_sample" | tr -d '\n' 
- ヒント
- trコマンドの唯一の利点、sedより優れているただ一つの機能、それが tr -d ‘\n’ です。
- 重要
- tr -d ‘\n’ のくくりはシングルクォーテーションである必要があります。ダブルクォーテーションではいけません。理由は「文字列」ではなく「文字(一文字)」しか扱えないからです。
固定長のデータをタブ区切りに変換する/カンマ区切りに変換する
ls -la コマンドで普通に出力します。
$ ls -la
drwxr-xr-x  13 suzukiiichiro  staff     416  7 14 13:31 ./
drwxrwxrwx+ 48 suzukiiichiro  staff    1536  7  5 10:05 ../
drwxrwxrwx   7 suzukiiichiro  staff     224  4 10  2020 AI_Algorithm_Game_Bash/
drwxrwxrwx  18 suzukiiichiro  staff     576  4 10  2020 AI_Algorithm_Game_Chess/
drwxrwxrwx  39 suzukiiichiro  staff    1248  4 10  2020 AI_Algorithm_Game_Othello/
drwxrwxrwx  31 suzukiiichiro  staff     992  4 10  2020 AI_Algorithm_Game_RubiksCube/
drwxrwxrwx  33 suzukiiichiro  staff    1056  4 10  2020 AI_Algorithm_Game_Shogi/
drwxrwxrwx   7 suzukiiichiro  staff     224  4 10  2020 C_Othello/
連続した空白をタブに変換します。
$ ls -l | tr -s " " "\t"
total	528
drwxrwxrwx	7	suzukiiichiro	staff	224	4	10	2020	AI_Algorithm_Game_Bash/
drwxrwxrwx	18	suzukiiichiro	staff	576	4	10	2020	AI_Algorithm_Game_Chess/
drwxrwxrwx	39	suzukiiichiro	staff	1248	4	10	2020	AI_Algorithm_Game_Othello/
drwxrwxrwx	31	suzukiiichiro	staff	992	4	10	2020	AI_Algorithm_Game_RubiksCube/
drwxrwxrwx	33	suzukiiichiro	staff	1056	4	10	2020	AI_Algorithm_Game_Shogi/
drwxrwxrwx	7	suzukiiichiro	staff	224	4	10	2020	C_Othello/
連続した空白をカンマに変換します。
$ ls -l | tr -s " " ","
drwxrwxrwx,7,suzukiiichiro,staff,224,4,10,2020,AI_Algorithm_Game_Bash/
drwxrwxrwx,18,suzukiiichiro,staff,576,4,10,2020,AI_Algorithm_Game_Chess/
drwxrwxrwx,39,suzukiiichiro,staff,1248,4,10,2020,AI_Algorithm_Game_Othello/
drwxrwxrwx,31,suzukiiichiro,staff,992,4,10,2020,AI_Algorithm_Game_RubiksCube/
drwxrwxrwx,33,suzukiiichiro,staff,1056,4,10,2020,AI_Algorithm_Game_Shogi/
drwxrwxrwx,7,suzukiiichiro,staff,224,4,10,2020,C_Othello/
 
 
