trコマンドで文字を変換・削除する方法|大文字小文字変換や改行・スペースの処理も


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > trコマンドで文字を変換・削除する方法|大文字小文字変換や改行・スペースの処理も
「ログファイルの中の文字を一括で置き換えたい」「大文字と小文字をまとめて変換したい」
サーバー運用の現場では、こうした文字単位の変換や削除がたびたび発生します。
そんなときに使うのが tr コマンドです。sedやawkほど多機能ではありませんが、そのぶんシンプルで高速に動作するため、パイプラインの中で日常的に使われています。

この記事では、trコマンドの実践的な使い方を解説します。
大文字小文字の変換、不要な文字の削除、改行やスペースの処理など、実務で役立つパターンを具体的なコマンド例とともに紹介します。

実行環境:RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済み

【この記事でわかること】

・tr '[:upper:]' '[:lower:]' で大文字小文字を一括変換できる
・-d オプションで不要な文字を一括削除できる
・-s で連続スペースの圧縮やログ整形に使える
・改行の変換やWindows改行コードの除去もできる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

trコマンドとは?文字単位で変換・削除を行うコマンド

tr(translate characters)は、標準入力から受け取ったテキストに対して、文字単位の変換・削除・圧縮を行うコマンドです。

基本的な構文は以下のとおりです。

tr [オプション] SET1 [SET2]

SET1に変換元の文字セット、SET2に変換先の文字セットを指定します。SET1の各文字がSET2の対応する位置の文字に変換される仕組みです。

trコマンドの特徴をまとめると、次のようになります。

標準入力のみ対応:ファイル名を引数に取れないため、catやリダイレクトと組み合わせて使う
文字単位の処理:「abc」を「xyz」に変換する場合、a→x、b→y、c→zと1文字ずつ対応する
正規表現は使えない:パターンマッチではなく、文字の1対1変換に特化している

sedとの違いを簡単に整理しておきましょう。sedは正規表現によるパターンマッチで文字列を置換しますが、trは文字を1文字ずつ別の文字に変換します。「ABCをすべて小文字にしたい」のような単純な文字変換はtrが適しており、「特定のパターンに一致する文字列を置き換えたい」場合はsedコマンドを使いましょう。

trコマンドの基本的な使い方

1. 大文字を小文字に変換する([:upper:] [:lower:])

最もよく使われるのが、大文字から小文字への変換です。POSIX文字クラスの[:upper:]と[:lower:]を使います。

# 大文字を小文字に変換する $ echo "HELLO WORLD" | tr '[:upper:]' '[:lower:]' hello world

POSIX文字クラスの代わりに、範囲指定で書くこともできます。

# 範囲指定で大文字→小文字に変換する $ echo "HELLO WORLD" | tr 'A-Z' 'a-z' hello world

どちらの書き方でも結果は同じです。[:upper:][:lower:]のほうがロケールに対応しているため、一般的にはこちらが推奨されます。

2. 小文字を大文字に変換する

逆方向の変換も同じ要領です。ホスト名を大文字で表示したい場面などで使えます。

# ホスト名を大文字に変換して表示する $ hostname | tr '[:lower:]' '[:upper:]' WEB-SERVER-01

シェルスクリプトの中で変数の値を大文字に統一したい場合にも便利です。

# 変数の値を大文字に変換する $ ENV_NAME="production" $ echo "$ENV_NAME" | tr '[:lower:]' '[:upper:]' PRODUCTION

3. 特定の文字を別の文字に置換する

日付の区切り文字を変えたり、スペースをアンダースコアに置き換えたりする場合に使います。

# 日付のハイフンをスラッシュに変換する $ echo "2026-04-09" | tr '-' '/' 2026/04/09

# スペースをアンダースコアに変換する(ファイル名の整形など) $ echo "Hello World" | tr ' ' '_' Hello_World

複数の文字を同時に変換することもできます。SET1とSET2の文字数を揃えると、位置ごとに1対1で変換されます。

# 複数の文字を同時に変換する(a→x, b→y, c→z) $ echo "aabbcc" | tr 'abc' 'xyz' xxyyzz

4. 文字を削除する(-dオプション)

-d(delete)オプションを使うと、指定した文字をすべて削除できます。

# 数字をすべて削除する $ echo "abc123def456" | tr -d '0-9' abcdef

# アルファベットをすべて削除する(数字だけを残す) $ echo "abc123def456" | tr -d '[:alpha:]' 123456

電話番号からハイフンを取り除いたり、文字列から空白を除去したりする場面で重宝します。

# 電話番号のハイフンを削除する $ echo "03-1234-5678" | tr -d '-' 0312345678

5. 連続する同じ文字を1つにまとめる(-sオプション)

-s(squeeze-repeats)オプションは、連続する同じ文字を1文字に圧縮します。

# 連続する文字を1つにまとめる $ echo "aabbccdd" | tr -s 'a-z' abcd

サーバー管理の現場で特に使うのが、連続するスペースを1つにまとめるパターンです。psやdfの出力をcutコマンドで加工する前処理としてよく使います。

# 連続するスペースを1つにまとめる $ echo "user1 10234 0.5 /usr/bin/httpd" | tr -s ' ' user1 10234 0.5 /usr/bin/httpd

dfコマンドの出力を加工する例も見てみましょう。

# dfの出力からスペースを圧縮してcutで使用率だけ取り出す $ df -h / | tail -1 | tr -s ' ' | cut -d ' ' -f 5 42%

応用・実務Tips

6. 改行をスペースに変換する(ファイルを1行にまとめる)

複数行のテキストを1行にまとめたいときに、改行文字(\n)をスペースに変換します。

# サーバーリストを1行にまとめる $ cat servers.txt web-01 web-02 db-01 $ cat servers.txt | tr '\n' ' ' web-01 web-02 db-01

逆に、区切り文字を改行に変換して1行を複数行にすることもできます。PATH環境変数の確認で便利です。

# コロン区切りを改行に変換する(PATHの確認) $ echo "$PATH" | tr ':' '\n' /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin

7. 補集合で指定文字以外を処理する(-cオプション)

-c(complement)オプションは、SET1の補集合(指定した文字以外のすべての文字)を対象にします。「残したい文字」を指定して、それ以外を削除・変換するという使い方です。

# 数字だけを残す(数字以外を削除する) $ echo "abc123def456" | tr -cd '0-9' 123456

-cと-dを組み合わせた「tr -cd」は「指定した文字以外を削除する」という意味です。特殊文字を除去してアルファベットと数字だけを残す場面で便利です。

# アルファベットと数字だけを残す(改行も維持する) $ echo "abc123!@#def" | tr -cd '[:alnum:]\n' abc123def

なお、-cdで改行(\n)を残す指定を忘れると、出力の末尾に改行がなくなりプロンプトが出力に続いてしまうので注意してください。

8. パイプと組み合わせた実務パターン

trはパイプラインの中で他のコマンドと組み合わせることで真価を発揮します。障害対応やログ解析の現場でよく使うパターンを紹介します。

CSVの区切り文字をタブに変換する

# CSVをTSV(タブ区切り)に変換する $ echo "name,age,city" | tr ',' '\t' name age city

Windows形式の改行コード(CR+LF)からCRを除去する

Windowsで作成されたファイルには改行の前にCR(\r)が含まれています。これが原因でスクリプトが正常に動作しないことがあります。

# CRを除去してUnix形式の改行に変換する $ cat windows_file.txt | tr -d '\r' > unix_file.txt # CRが含まれているかどうかを確認する $ cat -A windows_file.txt | head -3 line1^M$ line2^M$ line3^M$

ログファイルから特定のフィールドを抽出する

grepコマンドでフィルタした結果に対して、trで空白を整形してからcutで抽出するパターンです。

# アクセスログからステータスコード別に集計する $ grep "GET /api/" /var/log/httpd/access_log | tr -s ' ' | cut -d ' ' -f 9 | sort | uniq -c | sort -rn 847 200 123 304 34 404 5 500

ランダムなパスワード文字列を生成する

# /dev/urandomからアルファベットと数字だけを取り出して16文字のパスワードを生成する $ cat /dev/urandom | tr -cd '[:alnum:]' | head -c 16; echo kR9mBx4TvLp2NqYf

9. trとsedの使い分け

trとsedはどちらもテキストを変換するコマンドですが、得意な処理が異なります。以下の基準で使い分けてください。
比較項目 tr sed
処理単位 1文字ずつ変換 文字列パターンで置換
正規表現 使えない 使える
入力 標準入力のみ 標準入力+ファイル指定可
処理速度 高速(単純な文字変換) やや遅い(パターンマッチ)
ファイルの直接編集 できない -iオプションで可能
trを使う場面:
・大文字小文字の一括変換
・特定の文字(記号、数字など)の削除
・改行やスペースの変換・圧縮
・区切り文字の変更(カンマ→タブなど)

sedを使う場面:
・「http://」を「https://」に変換するような文字列単位の置換
・正規表現を使ったパターンマッチが必要な処理
・ファイルを直接書き換えたい場合
・特定の行だけを対象にした処理

迷ったときは、「1文字を別の1文字に変えるならtr、それ以外はsed」と覚えておけば間違いありません。

「tr: extra operand」が出た時の対処法

trコマンドでよく遭遇するエラーが「extra operand」です。

# クォートなしで実行するとエラーになる $ echo "Hello World" | tr [:upper:] [:lower:] tr: extra operand ']' Try 'tr --help' for more information.

このエラーは、SET1やSET2をクォートで囲んでいないことが原因です。角括弧がシェルのグロブ(ファイル名展開)として解釈されてしまい、trが想定より多くの引数を受け取ったことでエラーが発生します。

対処法はシンプルで、SET1とSET2をシングルクォートで囲んでください。

# シングルクォートで囲めば正常に動作する $ echo "Hello World" | tr '[:upper:]' '[:lower:]' hello world

特に[:upper:]のようなPOSIX文字クラスや、範囲指定(A-Z)を使う場合は、必ずクォートで囲む習慣をつけてください。

日本語(マルチバイト文字)を扱う場合の注意

trコマンドはバイト単位で処理を行う実装が多いため、日本語などのマルチバイト文字では期待どおりに動作しない場合があります。

RHEL 9やUbuntu 24.04のGNU coreutils版trでは、LANGやLC_ALLにUTF-8ロケールが設定されていれば、全角アルファベットの大文字小文字変換にも対応しています。

# ロケール設定を確認する $ locale | grep LC_CTYPE LC_CTYPE="ja_JP.UTF-8"

ただし、任意の日本語文字の変換(例:ひらがな→カタカナ)はtrでは対応できません。そのような処理にはsedやnkfを使ってください。

もしCロケール(POSIX)になっている場合はASCII範囲のみの処理になります。マルチバイト文字を扱う際はUTF-8ロケールが設定されているか確認しましょう。

本記事のまとめ

trコマンドの主な使い方を一覧にまとめます。
やりたいこと コマンド
大文字→小文字に変換 echo "TEXT" | tr '[:upper:]' '[:lower:]'
小文字→大文字に変換 echo "text" | tr '[:lower:]' '[:upper:]'
特定の文字を置換 echo "2026-04-09" | tr '-' '/'
数字を削除 echo "abc123" | tr -d '0-9'
連続スペースを圧縮 df -h | tr -s ' ' | cut -d ' ' -f 5
改行をスペースに変換 cat file.txt | tr '\n' ' '
指定文字以外を削除 echo "abc123" | tr -cd '[:alnum:]\n'
CRを除去(改行コード変換) cat file.txt | tr -d '\r' > output.txt
trコマンドは機能がシンプルなぶん覚えやすく、一度身につければ毎日のように使う場面があります。
「1文字を別の1文字に変える」処理はtrに任せ、パターンマッチが必要な処理はsedに任せるという使い分けを意識してください。

テキスト処理をさらに深く学びたい方は、以下の記事もあわせて参照してください。

関連記事:
sedコマンドで文字列を置換する方法
awkコマンドの使い方
cutコマンドの使い方
grepコマンドで文字列を検索する方法

テキスト処理の基礎から体系的に学びませんか?

trコマンドはテキスト処理の基本ですが、grep・awk・sedと組み合わせて初めて現場で力を発揮します。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。