はじめに

こんにちは!今回はtrコマンドについて解説します。

trはテキスト内の文字を変換したり削除したりするコマンドです。大文字を小文字に変換したり、特定の文字を別の文字に置き換えたり、超便利なコマンドですね。

テキスト処理をする時にめっちゃ活躍するので、これを機にマスターしちゃいましょう!

trコマンドとは

trは、標準入力からテキストを受け取って、指定された文字を変換・削除して標準出力に出力する外部コマンドです。“translate"の略ですね。

パイプで他のコマンドと組み合わせて使用することが多く、テキスト処理の強い味方です。正規表現には対応していませんが、シンプルな文字変換であればtrの方が高速です。

基本構文

1
tr [オプション] 変換元 [変換先]

変換元は置き換えたい文字、変換先は置き換え後の文字です。

主なオプション

オプション 説明
-d 文字を削除(変換先を指定しない)
-s 連続する同じ文字を1つにまとめる
-c 変換元の補集合を使用(指定した文字以外を対象)
-C -cと同じ(互換性オプション)
-t -d-sが同時に指定された時に変換先をスキップ

使用例

例1: 小文字を大文字に変換

1
echo "hello world" | tr a-z A-Z

実行結果:

1
HELLO WORLD

a-zは小文字全体、A-Zは大文字全体を表します。最も基本的な使い方です。

例2: 大文字を小文字に変換

1
echo "HELLO WORLD" | tr A-Z a-z

実行結果:

1
hello world

大文字から小文字への変換も同じやり方です。

例3: 特定の文字を別の文字に置き換え

1
echo "hello world" | tr o 0

実行結果:

1
hell0 w0rld

o(オー)を0(ゼロ)に置き換えます。

例4: 複数の文字を置き換え

1
echo "hello" | tr aeiou AEIOU

実行結果:

1
hEllO

複数の文字を同時に置き換えることができます。

例5: 特定の文字を削除

1
echo "h-e-l-l-o" | tr -d -

実行結果:

1
hello

-dオプションで指定した文字を削除します。

例6: すべての数字を削除

1
echo "hello123world456" | tr -d 0-9

実行結果:

1
helloworld

数字の範囲0-9を指定して削除できます。

例7: 連続する空白を1つの空白に

1
echo "hello    world" | tr -s ' '

実行結果:

1
hello world

-sオプションで連続する同じ文字を1つにまとめます。

例8: 改行を空白に変換

1
printf "hello\nworld" | tr '\n' ' '

実行結果:

1
hello world

改行を別の文字に変換することもできます。

例9: 補集合で処理(指定文字以外を削除)

1
echo "Hello123World" | tr -cd a-zA-Z

実行結果:

1
HelloWorld

-cオプションで補集合を使用。文字以外(数字など)を削除します。

例10: タブを空白に変換

1
printf "col1\tcol2\tcol3" | tr '\t' ' '

実行結果:

1
col1 col2 col3

タブを別の文字に変換する時に便利です。

Tips・注意点

エスケープ文字の指定方法

バックスラッシュを使ってエスケープシーケンスを指定できます。

1
2
3
4
5
6
7
8
# 改行を指定
tr '\n' ' '

# タブを指定
tr '\t' ' '

# バックスラッシュを指定
tr '\\' '/'

文字範囲の指定

-(ハイフン)で文字範囲を指定できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 小文字全体
a-z

# 大文字全体
A-Z

# 数字全体
0-9

# 複数の範囲を組み合わせ
a-zA-Z0-9

セット長が異なる場合

変換先が短い場合は、最後の文字が繰り返されます。

1
2
3
4
echo "hello" | tr aeiou x
# 結果: hxxxx

# すべてのaeiouをxに置き換える

sed や grep との違い

trは単純な文字置換・削除に特化していて、sedより高速です。ただし正規表現には対応していません。

1
2
3
4
5
# tr: シンプルで高速
echo "hello" | tr a A

# sed: より複雑な処理が可能
echo "hello" | sed 's/a/A/g'

実践的な使い方

ファイル名の正規化

1
2
3
4
filename="My File-2025.txt"
normalized=$(echo "$filename" | tr ' ' '_' | tr '-' '_')
echo "$normalized"
# 結果: My_File_2025.txt

ファイル名のスペースやハイフンをアンダースコアに統一する時に便利です。

CSV データのクリーニング

1
cat data.csv | tr -d '\r'

Windows形式のCSVファイルの改行コード(CRLF)から不要なCRを削除します。

ログファイルの大文字小文字を統一

1
cat app.log | tr A-Z a-z | grep error

ログファイルのエラーメッセージを小文字に統一して検索しやすくします。

IP アドレスの形式変換

1
2
echo "192-168-1-100" | tr '-' '.'
# 結果: 192.168.1.100

ハイフン区切りをドット区切りに変換する例です。

まとめ

trコマンドのポイント:

  • テキスト内の文字を変換・削除する基本コマンド
  • 小文字⇆大文字の変換: tr a-z A-Ztr A-Z a-z
  • -d オプション: 文字を削除する
  • -s オプション: 連続する同じ文字を1つにまとめる
  • -c オプション: 指定した文字以外を対象にする
  • よく使う組み合わせ: tr a-z A-Ztr -d 0-9tr -s ' '

シンプルなテキスト処理ならtrを使うのが一番効率的ですよ!