シンプルなテキスト処理

LinuxLinuxBeginner
今すぐ練習

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

はじめに

この実験では、必須のLinuxテキスト処理コマンド:trcoljoin、およびpasteについて学びます。これらのツールを使ってテキストファイルを効率的に操作する方法を学びます。これらは、多くのLinuxタスクにとって基本的なものです。このガイドは初心者向けに設計されており、各コマンドを十分に理解するのに役立つ詳細な説明と例を提供しています。

tr コマンドの使い方

「translate」の略である tr コマンドは、テキストストリーム内の文字を変換または削除するために使用される強力なツールです。ケースの変換、特定の文字の削除、または1文字を別の文字に置き換えるなどのタスクに特に役立ちます。

まずは、基本的な tr 操作から始めましょう。

  1. 文字列から特定の文字を削除する:
echo 'hello labex' | tr -d 'olh'

このコマンドは、入力文字列から 'o'、'l'、'h' のすべての出現を削除します。以下が起こっていることです。

  • echo 'hello labex' は "hello labex" という文字列を出力します。
  • |(パイプ)記号はこの出力を tr コマンドに送ります。
  • tr -d 'olh'tr に対して、見つけた任意の 'o'、'l'、または 'h' 文字を削除するように指示します。

出力として e abex が表示されるはずです。'o'、'l'、'h' のすべての文字がどのように削除されたかご覧ください。

  1. 重複する文字を削除する:
echo 'hello' | tr -s 'l'

このコマンドは、入力文字列の文字 'l' の重複を圧縮(-s)または削除します。出力として helo が表示されるはずです。

echo 'balloon' | tr -s 'o'

出力として ballon が表示されるはずです。重複する 'o' は1つの 'o' に圧縮されています。

  1. テキストを大文字に変換する:
echo 'hello labex' | tr '[:lower:]' '[:upper:]'

このコマンドは、すべての小文字を大文字に変換します。以下が起こっていることです。

  • '[:lower:]' はすべての小文字を表す文字クラスです。
  • '[:upper:]' はすべての大文字を表す文字クラスです。
  • このコマンドは、tr に対して、最初のセット内の任意の文字を2番目のセット内の対応する文字に置き換えるように指示します。

出力として HELLO LABEX が表示されるはずです。

これらのコマンドを試して、出力を観察してください。間違えても心配しないでください。いつでもコマンドを再度実行できます。何が起こるか気になる場合は、入力テキストまたは tr コマンド内の文字を変更してみてください。

たとえば、次のコマンドを実行すると何が起こると思いますか?

echo 'hello world' | tr 'ol' 'OL'

試してみてください!

tr についてもっと学びたい場合は、man tr を使ってマニュアルページを表示できます。これにより、tr のすべてのオプションと使用方法の包括的な一覧が得られます。マニュアルページを終了するには、'q' を押します。

忘れないでください。Linuxでは、ほとんどのコマンドは同じ構造に従います。command [options] arguments。このパターンを理解すると、より多くのコマンドを学ぶ際に役立ちます。

col コマンドの探究

col コマンドは、入力から逆改行をフィルタリングするために使用されます。特に、タブをスペースに変換する際に便利です。このコマンドは、フォーマットが不揃いなファイルを扱う際、特に異なるオペレーティングシステム間でファイルを移動する際によく使用されます。

col の使い方を見てみましょう。

  1. まず、タブ付きのファイルの内容を表示しましょう。
cat -A /etc/protocols | head -n 10

このコマンドは以下のように機能します。

  • cat はファイルの内容を表示するために使用されます。
  • -A オプションは、cat に対して非表示文字を含むすべての文字を表示するように指示します。
  • /etc/protocols は見ているファイルです(インターネットプロトコルを列挙するシステムファイルです)。
  • | は出力を次のコマンドにパイプします。
  • head -n 10 は出力の最初の10行のみを表示します。

出力には ^I 文字が表示されます。これらはタブを表します。^ 記号は制御文字を表すために使用され、I(アルファベットの9番目の文字)はタブのASCII文字(10進数値が9の文字)を表します。

  1. 次に、col を使ってこれらのタブをスペースに変換しましょう。
cat /etc/protocols | col -x | cat -A | head -n 10

このコマンドパイプラインは以下のように機能します。

  • cat /etc/protocols はファイルの内容を出力します。
  • | はこの出力を col にパイプします。
  • col -x はタブをスペースに変換します。-x オプションは col に対してタブをスペースに変換するように指示します。
  • もう1つの | はこの出力を cat -A にパイプし、すべての文字を表示します。
  • head -n 10 は最初の10行のみを表示します。

前のコマンドの出力と比較してみてください。^I 文字がスペースに置き換えられていることに気付くはずです。

-x オプションは col に対してタブをスペースに変換するように指示します。これは、異なるシステムやタブを異なる方法で扱う可能性のあるテキストエディタ間で一貫したフォーマットを保証する必要がある場合に便利です。

col に他にどのようなオプションがあるか気になる場合は、man col を使ってマニュアルページを表示できます。忘れないでください。マニュアルページを終了するには、'q' を押します。

join コマンドの使い方

join コマンドは、共通のフィールドを基に2つのファイルの行を結合するために使用されます。これはデータベースの結合操作に似ています。このコマンドは、関連データが複数のファイルに分割されており、共通のキーまたは識別子に基づいてそれらを結合したい場合に特に役立ちます。

2つの簡単なファイルを作成して結合してみましょう。

  1. 最初のファイルを作成する:
echo -e "1 apple\n2 banana\n3 cherry" > fruits.txt

このコマンドは以下のように機能します。

  • echo はテキストを出力するために使用されます。
  • -e はバックスラッシュエスケープの解釈を有効にします。
  • \n は新しい行を表します。
  • > は出力を fruits.txt という名前のファイルにリダイレクトします。
  1. 2番目のファイルを作成する:
echo -e "1 red\n2 yellow\n3 red" > colors.txt

これは、一致する番号があるが2番目のフィールドが異なる別のファイルを作成します。

  1. 次に、これらのファイルを結合しましょう:
join fruits.txt colors.txt

このコマンドは、最初のフィールド(番号)を基に両方のファイルの行を結合します。

以下のような出力が表示されるはずです。

1 apple red
2 banana yellow
3 cherry red

join コマンドは、最初のフィールド(番号1、2、3)を基に行を一致させ、両方のファイルの残りのフィールドを結合しました。

  1. また、結合に使用するフィールドを指定することもできます。たとえば:
join -1 2 -2 2 <(sort -k2 fruits.txt) <(sort -k2 colors.txt)

このより複雑なコマンドは以下のように機能します。

  • -1 2join に対して、最初のファイルの2番目のフィールドを結合に使用するように指示します。
  • -2 2join に対して、2番目のファイルの2番目のフィールドを結合に使用するように指示します。
  • <(...) はプロセス置換であり、ファイル名が期待される場所にコマンドの出力を使用できるようにします。
  • sort -k2 は2番目のフィールドを基にファイルをソートします。

最初にファイルをソートする必要があります。なぜなら、join は入力が結合フィールドでソートされていることを期待しているからです。

2つのファイル間に一致する2番目のフィールドがない場合、このコマンドは出力を生成しない場合があります。これは、一致がない場合の join の予想される動作です。

ソートがどのように機能するか見たい場合は、これらのコマンドを個別に試してみてください。

sort -k2 fruits.txt
sort -k2 colors.txt

忘れないでください。join は入力ファイルの行の順序に敏感です。結合フィールドでファイルがソートされていない場合、予期しない結果が得られるか、または全く出力が得られない場合があります。

paste コマンドの使い方

paste コマンドは、ファイルの行をマージするために使用されます。join とは異なり、共通のフィールドは必要ありません。複数のファイルを横並びに結合したり、複数のファイルから表形式の出力を作成したりする際に便利です。

paste の使い方を見てみましょう。

  1. 3つの簡単なファイルを作成する:
echo -e "apple\nbanana\ncherry" > fruits.txt
echo -e "red\nyellow\nred" > colors.txt
echo -e "sweet\nsweet\nsweet" > tastes.txt

これらのコマンドは、それぞれ3行の3つのファイルを作成します。

  1. 次に、paste を使ってこれらのファイルをマージしましょう:
paste fruits.txt colors.txt tastes.txt

このコマンドは、すべての3つのファイルの行を横並びにマージします。以下のような出力が表示されるはずです。

apple   red     sweet
banana  yellow  sweet
cherry  red     sweet

デフォルトでは、paste はタブ文字を使ってフィールドを区切ります。

  1. また、別の区切り文字を指定することもできます:
paste -d ':' fruits.txt colors.txt tastes.txt

-d ':' オプションは、paste に対して異なるファイルのフィールド間の区切り文字として ':' を使用するように指示します。以下のような出力が表示されるはずです。

apple:red:sweet
banana:yellow:sweet
cherry:red:sweet
  1. 最後に、-s オプションを試してみましょう。これはペーストをシリアライズします:
paste -s fruits.txt colors.txt tastes.txt

-s オプションは、paste に対して各ファイルの内容を1行として貼り付けるように指示します。以下のような出力が表示されるはずです。

apple   banana  cherry
red     yellow  red
sweet   sweet   sweet

出力の各行は、1つの完全なファイルの内容を表しています。

これらの paste 操作は、さまざまな方法で結合する必要があるデータを扱う際に非常に役立ちます。たとえば、ログファイルを結合したり、CSVファイルを作成したり、他のプログラムが処理できるようにデータを整形したりする際に paste を使用することができます。

忘れないでください。paste のさらに多くのオプションを調べたい場合は、常に man paste を使ってマニュアルページを表示できます。

テキスト処理で楽しむ

これらのテキスト処理コマンドを学んだので、楽しみましょう!テキストベースのゲームであるSpace Invadersをインストールして遊びましょう。これは、Linux環境でテキスト処理を創造的に使う方法を示しています。

  1. まず、パッケージリストを更新しましょう:
sudo apt-get update

このコマンドは、利用可能なパッケージとそのバージョンのリストを更新します。新しいソフトウェアをインストールする前にこれを実行するのは良い習慣です。

  • sudo はコマンドをスーパーユーザー権限で実行します。
  • apt-get はUbuntuのパッケージ管理ユーティリティです。
  • update はapt-getに対してパッケージリストを更新するように指示します。
  1. 次に、ゲームをインストールしましょう:
sudo apt-get install ninvaders -y

このコマンドはninvadersゲームをインストールします。

  • install はapt-getに対して新しいパッケージをインストールするように指示します。
  • ninvaders はインストールしたいパッケージの名前です。
  • -y はインストール中のプロンプトに対して自動的に「はい」と回答します。

apt-get に他にどのようなオプションがあるか気になる場合は、man apt-get を使ってマニュアルページを表示できます。

  1. インストールが完了したら、ゲームを起動できます:
ninvaders

このコマンドはSpace Invadersゲームを起動します。遊び方は以下の通りです。

  • 左と右の矢印キーを使って艦船を移動させます。
  • スペースバーを押して発射します。
  • 'p' を押してゲームを一時停止します。
  • 'q' を押してゲームを終了します。

数分間遊んでみてください。ハイスコアを更新できますか?

Space Invaders

このゲームは、端末でインタラクティブな体験を作成するためにテキストを操作する方法の素晴らしい例です。単純なASCII文字を使って艦船、エイリアン、弾丸を表現しており、たったのテキストだけでも複雑なインタラクションを表現できることを示しています。

遊び終わったら、'q' を押してゲームを終了してください。

まとめ

この実験では、Linuxにおけるいくつかの強力なテキスト処理コマンドを学びました。

  1. tr: テキスト内の文字を翻訳または削除するために使用します。特定の文字を削除したり、重複を除去したり、テキストのケースを変更するために使用しました。
  2. col: タブとスペースの間で変換するために使用します。システムファイル内のタブ文字を表示して操作するために使用しました。
  3. join: 共通のフィールドを基に2つのファイルの行を結合するために使用します。サンプルファイルを作成し、異なるフィールドを基に結合しました。
  4. paste: ファイルの行をマージするために使用します。複数のファイルを作成し、さまざまな paste オプションを使ってさまざまな方法で結合しました。

これらのコマンドはLinuxのテキスト処理ツールキットにおける必須のツールです。効率的にテキストデータを操作および分析するために、さまざまな方法で組み合わせることができます。主な要点は以下の通りです。

  • Linuxはすべてをファイルとして扱い、多くの設定ファイルはテキスト形式です。
  • パイプ (|) 記号はコマンドを連鎖させるために強力です。
  • 多くのLinuxコマンドは同様の構造を持っています:command [オプション] 引数
  • マニュアルページ (man コマンド) は、任意のコマンドに関する詳細を学ぶための素晴らしいリソースです。

最後に、テキストベースのゲームをインストールして遊ぶことで、テキスト処理がどのように創造的に使われるかを検討しました。これは、Linux環境におけるテキストの多様性を示しています - たったのテキスト文字だけを使っても、複雑なインタラクティブなアプリケーションを構築できます!

Linuxの学習を続けるにつれて、これらのテキスト処理スキルはシステム管理、データ分析、さらにはプログラミングタスクの多くの側面で役立つことがわかります。これらのコマンドを練習し続けると、Linuxのテキスト処理に精通するようになります!

忘れないでください。学ぶ最善の方法は実践です。これらのコマンドを試して、さまざまなオプションを試し、何が起こるか見てみましょう。楽しいテキスト処理を!