Linuxのコマンドライン操作では、テキストの加工が必要になる場面がよくあります。そんな時に便利なのが「tr
コマンド」です。tr
は、「translate(変換)」や「delete(削除)」の頭文字を取ったシンプルなコマンドで、文字の置き換えや削除を行うことができます。sedやawkほど複雑ではなく、簡単な文字操作を手軽に済ませたいときに重宝されるコマンドです。本記事では、tr
コマンドの基本的な使い方から実用的な例まで、初心者にもわかりやすく解説します。
tr
は「translate characters」の略で、標準入力から受け取った文字を、指定されたルールに従って変換または削除するためのコマンドです。基本的にはファイルを直接扱うのではなく、標準入力からのデータに対して動作します。
例えば、以下のような操作が可能です。
他のコマンドと組み合わせて使うことで、テキスト処理をより効率的に行えます。
tr
コマンドの基本的な構文は以下の通りです。
tr [OPTION]... SET1 [SET2]
SET1
: 変換または削除の対象となる文字セットSET2
: SET1
を変換する先の文字セット(省略時は削除動作)よく使うオプションは次のとおりです:
オプション | 意味 |
---|---|
-d | 指定した文字を削除する |
-s | 重複する文字を1つに圧縮する |
-c | 指定した文字セットを補集合として扱う(つまり「それ以外」) |
アルファベットの小文字を大文字に変換するには以下のようにします。
echo "hello world" | tr 'a-z' 'A-Z'
出力:
nginxコピーする編集するHELLO WORLD
その逆も可能です。
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
出力:
hello world
例えば、1
を一
に、2
を二
に置き換えたい場合:
echo "123" | tr '12' '一二'
出力:
一二3
例えば、空白や改行を削除したい場合:
echo "a b c" | tr -d ' '
出力:
nginxコピーする編集するabc
改行を削除するには:
echo -e "line1\nline2" | tr -d '\n'
出力:
line1line2
echo "abc123xyz" | tr -d '0-9'
出力:
abcxyz
連続する同じ文字を1文字にまとめたい場合に使うのが -s
オプションです。
echo "aa bbb cc" | tr -s ' '
出力:
aa bbb cc
複数の改行を1つにまとめたい場合にも有効です:
echo -e "line1\n\n\nline2" | tr -s '\n'
出力:
line1
line2
-c
オプションを使うと、指定した文字「以外」を対象にできます。
たとえば、英字以外を削除するには:
echo "abc123DEF!@#" | tr -cd 'a-zA-Z'
出力:
abcDEF
tr
は単体でも便利ですが、cat
やgrep
、cut
、sort
など他のコマンドと組み合わせることで、さらに強力になります。
cat sample.txt | tr 'a-z' 'A-Z'
echo "abc123xyz" | tr -cd 'a-zA-Z'
出力:
abcxyz
cat file.txt | tr -s '\n'
tr
は文字単位でしか操作できないため、「文字列全体の置換」はできません(例:abc
→ xyz
のような文字列単位の変換にはsed
を使用)。tr
は正規表現を扱えません。正規表現による高度な変換はsed
やawk
を使う必要があります。cat
などと組み合わせます。tr
コマンドは、Linuxのテキスト処理において非常にシンプルかつ便利なツールです。文字の変換や削除、圧縮といった操作を一行で手軽に実行できるため、スクリプトの中でも多用されます。特に、正規表現までは必要ないけれど、ちょっとした文字の置き換えやクリーニングを行いたい時に役立ちます。
コマンドラインでテキストを扱う機会が多い方は、ぜひtr
を使いこなして、作業効率をアップさせましょう。