trコマンドで文字列を変換・削除する方法

先生

trコマンド、使いこなせてる?文字変換・削除でテキスト処理を自由自在に!

trコマンドとは?文字列変換・削除の基本

trコマンドは、UNIX系のオペレーティングシステムで利用できる、文字列を変換、削除、圧縮するための強力なコマンドラインツールです。テキスト処理において、特定の文字を別の文字に置き換えたり、不要な文字を削除したりする際に非常に役立ちます。シェルスクリプトやデータ処理パイプラインで頻繁に使用されます。

trコマンドは、標準入力からテキストを受け取り、指定された変換または削除を行い、結果を標準出力に書き出します。これにより、他のコマンドと組み合わせて、複雑なテキスト処理タスクを実行できます。

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

tr [オプション] 文字セット1 [文字セット2]

文字セット1には、変換または削除する文字を指定します。文字セット2には、文字セット1に対応する変換後の文字を指定します。文字セット2が省略された場合、文字セット1に指定された文字は削除されます。

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

最も基本的な使い方は、文字の置換です。例えば、すべての小文字の’a’を大文字の’A’に置換するには、次のようにします。

echo "hello world" | tr 'a' 'A'

このコマンドは”hello world”という文字列をtrコマンドに渡し、’a’を’A’に置換します。出力は”hello world”となります。

複数の文字を同時に置換することも可能です。例えば、’abc’を’XYZ’に置換するには、次のようにします。

echo "abc def" | tr 'abc' 'XYZ'

このコマンドは、’a’を’X’、’b’を’Y’、’c’を’Z’に置換します。出力は”XYZ def”となります。

文字セットの長さが異なる場合、trコマンドは短い方のセットに合わせて動作します。長い方のセットの余りの文字は無視されます。

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

trコマンドは、指定された文字を削除することもできます。-dオプションを使用します。

echo "hello world" | tr -d 'l'

このコマンドは、”hello world”からすべての’l’を削除します。出力は”heo word”となります。

複数の文字を同時に削除することも可能です。

echo "hello world" | tr -d 'lo'

このコマンドは、”hello world”からすべての’l’と’o’を削除します。出力は”he wrd”となります。

trコマンドの便利なオプション

trコマンドには、いくつかの便利なオプションがあります。

-sオプション: 連続する同じ文字を1つに圧縮します。

echo "aaabbbccc" | tr -s 'abc'

このコマンドは、連続する’a’、’b’、’c’をそれぞれ1つに圧縮します。出力は”abc”となります。

-cオプション: 文字セット1に指定されていない文字を対象とします。

echo "hello world" | tr -c 'l' '*'

このコマンドは、’l’以外のすべての文字を’*’に置換します。出力は”ll“となります。

文字クラス: trコマンドは、POSIX文字クラスをサポートしています。これを使用すると、特定の種類の文字を簡単に指定できます。例えば、[:lower:]はすべての小文字、[:upper:]はすべての大文字を表します。

echo "Hello World" | tr '[:upper:]' '[:lower:]'

このコマンドは、すべての大文字を小文字に変換します。出力は”hello world”となります。

よく使う文字クラスの例:

[:alnum:]: 英数字

[:alpha:]: アルファベット

[:digit:]: 数字

[:lower:]: 小文字

[:upper:]: 大文字

[:punct:]: 句読点

[:space:]: 空白文字

trコマンドの実践例

ファイル内の改行コードを削除する

Windows形式のテキストファイル(改行コードがCRLF)をUNIX形式(改行コードがLF)に変換する場合、CRを削除します。

tr -d '\r' < windows_file.txt > unix_file.txt

URLエンコード/デコード

trコマンドで完全にURLエンコード/デコードできるわけではありませんが、簡単な置換には利用できます。

echo "hello world" | tr ' ' '+'

この例では、スペースを’+’に置換しています。

大文字小文字変換

echo "Hello World" | tr '[:upper:]' '[:lower:]'

すべての文字を小文字に変換します。

特定の文字以外を削除

例えば、数字以外の文字を削除して、数字だけを取り出す。

echo "abc123def456" | tr -cd '[:digit:]\n'

ここでは、改行文字\nも削除対象から除外しています。\nがないと全ての文字が連結されて表示されてしまうためです。

参考リンク

まとめ

trコマンドは、シンプルながらも強力なテキスト処理ツールです。文字列の置換、削除、圧縮など、さまざまなタスクを効率的に実行できます。オプションや文字クラスを組み合わせることで、より複雑な処理も可能です。シェルスクリプトやデータ処理パイプラインで活用することで、作業効率を大幅に向上させることができます。ぜひ、trコマンドをマスターして、テキスト処理のスキルを向上させてください。