高度なテキスト操作(sed、awk)
ストリーム編集に使う「sed」と、強力なテキスト処理、パターン検索、データ抽出に使う「awk」を学びます。
「高度なテキスト操作(sed、awk)」はCoddyKit上の無料Linux Command Line & Bash Scripting Masteryレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLinux Command Line & Bash Scripting Mastery学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Linux Command Line & Bash Scripting Masteryコースには全4レッスンが含まれています。
sedでストリームを編集する
sedは「stream editor」の略で、テキストの解析や変換に使える強力なコマンドラインユーティリティです。テキストストリームを1行ずつ処理します。対話操作を行わないテキストエディターのようなものだと考えてください。
sedは1行読み込み、置換や削除などのコマンドを適用し、結果を出力してから次の行に進みます。そのため、大きなファイルやパイプで渡されたデータを効率的に処理できます。
簡単なテキスト置換
sedの最も一般的な用途はテキストの置換です。sコマンドに続けて、区切り文字(多くの場合は/)、検索するパターン、別の区切り文字、置換後のテキスト、最後の区切り文字を指定します。
構文:sed 's/pattern/replacement/' filename
サンプルファイル内の「apple」を「orange」に置き換えてみてください。
#!/bin/bash
# Create a sample file
echo "I like red apple." > fruits.txt
echo "My favorite fruit is apple." >> fruits.txt
echo "Another apple here." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command:"
sed 's/apple/orange/' fruits.txt
# Clean up
rm fruits.txtグローバル検索と大文字・小文字の区別なし
デフォルトでは、sedは各行でパターンに一致する最初の出現箇所だけを置換します。1行内のすべての出現箇所を置換するには、g(グローバル)フラグを使用します。
大文字と小文字を区別せずに検索するには、iフラグを使用します。giのようにフラグを組み合わせることもできます。
例:「apple」を大文字・小文字を区別せずにすべて「banana」に置換します。
#!/bin/bash
# Create a sample file
echo "Apple is good." > fruits.txt
echo "I eat an apple and another Apple." >> fruits.txt
echo "Apples are tasty." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command (s/apple/banana/gi):"
sed 's/apple/banana/gi' fruits.txt
# Clean up
rm fruits.txtsedで行を削除する
sedを使って、特定のパターンに一致する行全体を削除することもできます。これにはdコマンドを使用します。
構文:sed '/pattern/d' filename
これは、「DEBUG」を含むログエントリや空行など、不要な行を削除する場合に便利です。
「error」を含む行を削除してみましょう。
#!/bin/bash
# Create a sample file
echo "INFO: User logged in." > log.txt
echo "WARNING: Disk space low." >> log.txt
echo "ERROR: File not found." >> log.txt
echo "INFO: Operation complete." >> log.txt
echo "ERROR: Permission denied." >> log.txt
echo "Original content:"
cat log.txt
echo ""
echo "---"
echo "Running sed command (/error/d):"
sed '/error/d' log.txt
# Clean up
rm log.txtawk:パターン走査言語
awkも強力なテキスト処理ツールで、データの抽出やレポート作成によく使用されます。sedがストリームエディタであるのに対し、awkはテキスト処理用に設計されたプログラミング言語に近いものです。
awkはsedと同様に、テキストファイルを1行ずつ処理します。ただし、各行を「レコード」として扱い、区切り文字に基づいてレコードを「フィールド」(列)に分割します。
デフォルトでは、awkは空白文字(スペースやタブ)をフィールドの区切り文字として使用します。
データフィールドへのアクセス
awkでは、フィールドを$1、$2、$3などで参照します。$0は行全体を表します。
波かっこ{}内でprintコマンドを使用すると、特定のフィールドを出力できます。構文は次のとおりです:awk '{ print $FIELD_NUMBER }' filename
簡単なデータファイルから1番目と3番目のフィールドを出力してみましょう。
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (print $1, $3):"
awk '{print $1, $3}' data.txt
# Clean up
rm data.txtawkで行をフィルタリングする
sedと同様に、awkでもパターンに基づいて行をフィルタリングできます。アクションブロックの前にパターンを指定します。アクションは、パターンに一致する行に対してのみ実行されます。
構文:awk '/pattern/ { action }' filename
「London」に住む人の名前だけを検索して出力してみましょう。
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "David 28 London" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (/London/ {print $1}):"
awk '/London/ {print $1}' data.txt
# Clean up
rm data.txtawkで初期化と終了処理を行う
awkでは、行の処理を開始する前(BEGINブロック)と、すべての行の処理が完了した後(ENDブロック)に実行するアクションを指定できます。
BEGINブロックは、ヘッダーの出力や変数の初期化に適しています。ENDブロックは、集計結果、合計、フッターの出力に最適です。
出力にヘッダーとフッターを追加してみましょう。
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (BEGIN/END):"
awk 'BEGIN { print "--- User Data ---" } { print $1, $2 } END { print "--- End Report ---" }' data.txt
# Clean up
rm data.txtawkの条件分岐
awkのアクションブロック内では、if文を使って、フィールドの値やその他の条件に基づく処理を行えます。これにより、awkは複雑なデータのフィルタリングや変換にも対応できる強力なツールになります。
構文:awk '{ if (condition) { action } }' filename
25歳を超えるユーザーだけを出力してみましょう。
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Diana 27 Berlin" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (if $2 > 25):"
awk '{ if ($2 > 25) { print $1, $2 } }' data.txt
# Clean up
rm data.txtクイックチェック:sedとawk
names.txtという名前のファイルに、次の内容が入っているとします:
John Doe,30,New York
Jane Smith,25,London
Peter Jones,40,Paris
30歳を超える人の名前(1番目のフィールド)だけを出力するコマンドは、次のうちどれでしょうか。
振り返り:sedとawkの威力
sedによるストリーム編集と、awkによる高度なテキスト処理の威力について学びました。
sedは、行単位での簡単な置換、削除、変換に最適です。awkは、構造化テキストの解析、フィールドの操作、条件分岐を使ったデータの抽出やレポート作成に優れています。
これらのツールは、Linux環境でのスクリプト作成、ログ分析、データ操作に欠かせません。
よくある質問
「高度なテキスト操作(sed、awk)」レッスンは無料ですか?
はい。「高度なテキスト操作(sed、awk)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Linux Command Line & Bash Scripting Masteryコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Linux Command Line & Bash Scripting Masteryコースには全4レッスンが含まれています。
「高度なテキスト操作(sed、awk)」で何を学びますか?
ストリーム編集に使う「sed」と、強力なテキスト処理、パターン検索、データ抽出に使う「awk」を学びます。 ブラウザで直接実行するハンズオンコードでLinux Command Line & Bash Scripting Masteryを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Linux Command Line & Bash Scripting Masteryを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLinux Command Line & Bash Scripting Masteryは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「高度なテキスト操作(sed、awk)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLinux Command Line & Bash Scripting Masteryレッスンでコードを書いて実行できますか?
はい。すべてのLinux Command Line & Bash Scripting Masteryレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。