Linux の tr コマンド:文字変換

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux の tr コマンドを調べます。これは、文字レベルでのテキスト変換に役立つ汎用ユーティリティです。「translate」の略である tr コマンドは、ケース変換、特定の文字の削除、基本的なデータクリーニングなどのタスクに広く使用されます。この実験が終了するとき、あなたはさまざまなテキスト操作シナリオで tr を使いこなせるようになります。この実験は初心者向けに設計されていますので、Linux コマンドに慣れていなくても心配しないでください。私たちが丁寧に各ステップを案内します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/tr("Character Translating") subgraph Lab Skills linux/echo -.-> lab-219198{{"Linux の tr コマンド:文字変換"}} linux/cat -.-> lab-219198{{"Linux の tr コマンド:文字変換"}} linux/tr -.-> lab-219198{{"Linux の tr コマンド:文字変換"}} end

tr の基本を理解する

まずは、tr コマンドの基本構文を理解しましょう。

tr [OPTION]... SET1 [SET2]

tr コマンドは、標準入力(stdin)からテキストを読み取り、指定されたオプションと文字セットに従って変換し、結果を標準出力(stdout)に書き出します。

簡単な例から始めましょう。基本的な挨拶メッセージが書かれた greeting.txt という名前のファイルを作成し、その後 tr を使ってすべての小文字を大文字に変換します。

まず、ファイルを作成します。

echo "hello, world" > ~/project/greeting.txt

ヒント:ファイル作成コマンドをコピーしてターミナルに貼り付けることで、正しくファイルを作成できます。

このコマンドは、プロジェクトディレクトリ(~/project/)に新しい greeting.txt という名前のファイルを作成し、内容を "hello, world" にします。

次に、tr を使ってすべての小文字を大文字に変換しましょう。

cat ~/project/greeting.txt | tr 'a-z' 'A-Z'

次の出力が表示されるはずです。

HELLO, WORLD

このコマンドを分解してみましょう。

  1. cat ~/project/greeting.txt:これはファイルの内容を読み取ります。
  2. |:これはパイプ記号です。左側のコマンドの出力を受け取り、右側のコマンドの入力として供給します。
  3. tr 'a-z' 'A-Z':これが私たちの tr コマンドです。最初のセット('a-z'、すべての小文字を表す)の各文字を、2番目のセット('A-Z'、すべての大文字を表す)の対応する文字に変換します。

このコマンドは元のファイルを変更しません。変換されたテキストを保存したい場合は、出力を新しいファイルにリダイレクトする必要があります。

tr を使って文字を削除する

tr コマンドを使えば、入力から特定の文字を削除することもできます。不要な文字を削除してテキストをクリーンアップする必要がある場合、これは特に便利です。句読点が含まれたファイルを作成し、その後削除してみましょう。

まず、句読点が含まれたファイルを作成します。

echo "Hello, World! How are you?" > ~/project/punctuated.txt

ヒント:ファイル作成コマンドをコピーしてターミナルに貼り付けることで、正しくファイルを作成できます。

次に、tr を使ってすべての句読点を削除しましょう。

cat ~/project/punctuated.txt | tr -d '[:punct:]'

次のように表示されるはずです。

Hello World How are you

このコマンドを分解してみましょう。

  1. cat ~/project/punctuated.txt:これはファイルの内容を読み取ります。
  2. |:これは出力を tr コマンドにパイプで送ります。
  3. tr -d '[:punct:]'
    • -d オプションは tr に指定された文字を削除するように指示します。
    • [:punct:] は、すべての句読点文字を表す文字クラスです。文字クラスは、文字のグループを指定するのを簡単にするための事前定義済みの文字セットです。

このコマンドは、テキストからすべての句読点文字を削除し、文字、数字、空白のみを残します。

複数の文字を変換する

次に、より複雑な変換を試してみましょう。暗号化されたテキストが書かれたファイルを作成し、tr を使って復号化します。この例は、tr が簡単な暗号化と復号化にどのように使えるかを示しています。

まず、暗号化されたテキストが書かれたファイルを作成します。

echo "Tijt jt b tfdsfu nfttbhf." > ~/project/encoded.txt

ヒント:ファイル作成コマンドをコピーしてターミナルに貼り付けることで、正しくファイルを作成できます。

次に、それを復号化しましょう。

cat ~/project/encoded.txt | tr 'b-za-a' 'a-z'

次のように表示されるはずです。

This is a secret message.

このコマンドを分解してみましょう。

  1. cat ~/project/encoded.txt:これは暗号化されたファイルの内容を読み取ります。
  2. |:これは出力を tr コマンドにパイプで送ります。
  3. tr 'b-za-a' 'a-z'
    • 最初のセット、'b-za-a' は、'b' を 'a' として、'c' を 'b' として、というように、アルファベットが1つシフトされたものを表しており、'a' は 'z' に戻ります。
    • 2番目のセット、'a-z' は通常のアルファベットです。
    • これにより、入力の各文字をアルファベットで1つ後ろにシフトします。

この種の置換は、シーザー暗号と呼ばれる非常に単純な暗号化形式です。実際の使用には安全ではありませんが、tr が文字ごとの置換にどのように使えるかの良い例です。

tr で文字クラスを使用する

tr コマンドは、事前定義された文字のセットであるさまざまな文字クラスをサポートしています。これらは、より複雑なテキスト変換にとても役立ちます。実際のシナリオでこれらの一部を使ってみましょう。

まず、混合内容が書かれたファイルを作成します。

echo "User123 logged in at 09:45 AM on 2023-08-15" > ~/project/log_entry.txt

ヒント:ファイル作成コマンドをコピーしてターミナルに貼り付けることで、正しくファイルを作成できます。

次に、このログエントリーから数字のみを抽出しましょう。

cat ~/project/log_entry.txt | tr -cd '[:digit:]'

次のように表示されるはずです。

12309452023815

このコマンドを分解してみましょう。

  1. cat ~/project/log_entry.txt:これはログファイルの内容を読み取ります。
  2. |:これは出力を tr コマンドにパイプで送ります。
  3. tr -cd '[:digit:]'
    • -c オプションはセットを補完します(つまり、「このセットには含まれない」という意味)。
    • -d オプションは指定された文字を削除します。
    • [:digit:] は、すべての数字(0-9)を表す文字クラスです。
    • 一緒に -cd '[:digit:]' は、「数字でないすべての文字を削除する」という意味になります。

このコマンドは、混合テキストから数値データを抽出する際に便利で、ログ分析やデータクリーニングタスクに役立ちます。

tr を使って繰り返しを圧縮する

tr コマンドは、繰り返された文字を1回だけに圧縮することもできます。不必要な繰り返しがあるデータをクリーンアップする際に便利です。繰り返された文字が含まれたファイルを作成し、その後クリーンアップしてみましょう。

まず、繰り返された空白が含まれたファイルを作成します。

echo "This    is    a    test    with    extra    spaces." > ~/project/spaced.txt

ヒント:ファイル作成コマンドをコピーしてターミナルに貼り付けることで、正しくファイルを作成できます。

次に、tr を使って繰り返された空白を圧縮しましょう。

cat ~/project/spaced.txt | tr -s ' '

次のように表示されるはずです。

This is a test with extra spaces.

このコマンドを分解してみましょう。

  1. cat ~/project/spaced.txt:これは余分な空白が含まれたファイルの内容を読み取ります。
  2. |:これは出力を tr コマンドにパイプで送ります。
  3. tr -s ' '
    • -s オプションは、指定された文字の繰り返しを1回だけに圧縮します。
    • ' ' は、空白文字を圧縮したいことを指定します。

このコマンドは、フォーマットが不適切なデータを処理する際や、テキストファイル内の空白を正規化する必要がある場合に特に便利です。

まとめ

この実験では、Linux の汎用的な tr コマンドを調べました。以下のことができる方法を学びました。

  1. テキストのケースを変換する
  2. 特定の文字を削除する
  3. 複数の文字を変換する
  4. 文字クラスを使用する
  5. 繰り返しのある文字を圧縮する

tr コマンドは、テキスト操作に強力なツールです。ここでは、詳細を扱わなかった追加オプションをいくつか紹介します。

  • -c:string1 の文字セットを補完します。つまり、string1 に含まれないすべての文字に対して操作します。
  • -t:string1 を string2 の長さに切り詰めます。

より高度なテキスト処理タスクについては、将来の実験で sedawk などの他のコマンドを調べることができます。

参考資料