このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:grepコマンドの総合演習

grepコマンドの総合演習

 テキスト処理やログ解析などで頻繁に使用されるgrepコマンドは、正規表現を活用することで強力なパターンマッチングが可能です。ここでは、これまで学習してきたgrepコマンドと正規表現の知識を総合的に活用するための演習を行います。演習を通じて理解を深め、実践的なスキルを身につけましょう。

grepコマンドの概要

 grepコマンドは、指定したパターンに一致する行を検索し、表示するためのコマンドです。正規表現を使用することで、複雑なパターンにも柔軟に対応できます。

【書式】
grep [オプション] '<検索パターン>' <ファイル名>

  • [オプション]:コマンドの動作を変更するためのオプション。
  • '<検索パターン>':検索したい正規表現パターン(シングルクォートで囲む)。
  • <ファイル名>:検索対象のファイル名。

演習用サンプルファイルの作成

以下の演習で使用するテキストファイルexample.txtを作成します。

user01@ubuntu:~$ nano example.txt

example.txtの内容

apple
Apple
APPLE
application
apply
applicable
banana
Banana
BANANA
bandana
band
candle
Candle
candy
candid
1234567
9876543
12345678
123-4567
987-6543
1234-5678
abc123
def456
ghi789
John Doe
Jane Smith
Alice Johnson
Bob Brown

charlie@example.com
dave.smith@example.co.jp
eve_jones@sample.org
frank-lee@domain.net

grep is a powerful tool
Using grep with regular expressions
Pattern matching with grep
The quick brown fox jumps over the lazy dog

演習問題

演習1:大文字・小文字を区別せずに「appl」を含む行を検索

問題:example.txtから、「appl」という単語を大文字・小文字を区別せずに含む行をすべて表示してください。

解答例

user01@ubuntu:~$ grep -i 'appl' example.txt
apple
Apple
APPLE
application
apply
applicable

解説

  • -iオプションを使用すると、大文字・小文字を区別せずに検索できます。
  • パターン'appl'に一致するすべての行が表示されます。

演習2:数字のみで構成された行を検索

問題:example.txtから、数字のみで構成された行をすべて表示してください。

解答例

user01@ubuntu:~$ grep -E '^[0-9]+$' example.txt
1234567
9876543
12345678

解説

  • -Eオプションで拡張正規表現を使用します。
  • パターン'^[0-9]+$'は、行の先頭から末尾まで数字が1回以上繰り返される行にマッチします。
  • このパターンに一致する行は、数字のみで構成された行です。

演習3:メールアドレスを含む行を検索

問題:example.txtから、メールアドレスの形式(例:user@example.com)の行をすべて表示してください。

解答例

user01@ubuntu:~$ grep -E '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' example.txt
charlie@example.com
dave.smith@example.co.jp
eve_jones@sample.org
frank-lee@domain.net

解説

  • 正規表現でメールアドレスのパターンを指定します。
    ^[a-zA-Z0-9._%+-]+:ユーザー名部分
    @:アットマーク
    [a-zA-Z0-9.-]+:ドメイン名部分
    ・\.[a-zA-Z]{2,}$:トップレベルドメイン部分(2文字以上)
  • このパターンに一致する行がメールアドレスを含む行です。

演習4:「John」または「Jane」を含む行を検索

問題:example.txtから、「John」または「Jane」を含む行をすべて表示してください。

解答例

user01@ubuntu:~$ grep -E 'John|Jane' example.txt
John Doe
Jane Smith
Alice Johnson

解説

  • |メタ文字を使用して、OR条件の検索を行います。
  • JohnまたはJaneにマッチする行が表示されます。
  • Alice JohnsonJohnsonJohnが含まれているためマッチします。

演習5:単語「grep」を含む行を検索(大文字・小文字区別)

問題:example.txtから、「grep」という単語を含む行を表示してください。ただし、大文字・小文字を区別してください。

解答例

user01@ubuntu:~$ grep '\bgrep\b' example.txt
grep is a powerful tool
Using grep with regular expressions
Pattern matching with grep

解説

  • \b は単語境界を示すメタ文字です。
  • パターン '\bgrep\b' は、単語としてのgrepにマッチします。
  • 大文字・小文字を区別するため、-iオプションは使用しません。

演習6:行頭が「a」で始まる行を検索

問題:example.txtから、行の先頭が小文字の「a」で始まる行をすべて表示してください。

解答例

user01@ubuntu:~$ grep '^a' example.txt
apple
application
apply
applicable
abc123

解説

  • ^は行頭を示すメタ文字です。
  • パターン'^a'は、行頭がaで始まる行にマッチします。

演習7:空行を除外してファイルの内容を表示

問題:example.txtの内容を、空行を除いてすべて表示してください。

解答例

user01@ubuntu:~$ grep -v '^$' example.txt
apple
Apple
APPLE
application
apply
applicable
banana
Banana
BANANA
bandana
band
candle
Candle
candy
candid
1234567
9876543
12345678
123-4567
987-6543
1234-5678
abc123
def456
ghi789
John Doe
Jane Smith
Alice Johnson
Bob Brown
charlie@example.com
dave.smith@example.co.jp
eve_jones@sample.org
frank-lee@domain.net
grep is a powerful tool
Using grep with regular expressions
Pattern matching with grep
The quick brown fox jumps over the lazy dog

解説

  • -vオプションは、パターンにマッチしない行を表示します。
  • パターン'^$'は空行にマッチします。
  • したがって、空行を除いたすべての行が表示されます。

演習8:数字で始まり、数字で終わる行を検索

問題:example.txtから、行頭と行末が数字である行をすべて表示してください。

解答例

user01@ubuntu:~$ grep -E '^[0-9].*[0-9]$' example.txt
1234567
9876543
12345678
123-4567
987-6543
1234-5678

解説

  • パターン'^[0-9].*[0-9]$'は、行頭が数字、行末も数字である行にマッチします。
  • .*は任意の文字列(0文字以上)を示します。

演習9:7文字以上の行を検索

問題:example.txtから、7文字以上の長さを持つ行をすべて表示してください。

解答例

user01@ubuntu:~$ grep -E '^.{7,}$' example.txt
application
applicable
bandana
1234567
9876543
12345678
123-4567
987-6543
1234-5678
John Doe
Jane Smith
Alice Johnson
Bob Brown
charlie@example.com
dave.smith@example.co.jp
eve_jones@sample.org
frank-lee@domain.net
grep is a powerful tool
Using grep with regular expressions
Pattern matching with grep
The quick brown fox jumps over the lazy dog

解説

  • パターン'^.{7,}$'は、行頭から行末まで任意の文字が7回以上繰り返される行にマッチします。
  • .は任意の1文字、{7,}は7回以上の繰り返しを示します。

演習10:「the」を含む行を検索(大文字・小文字区別なし)

問題:example.txtから、「the」という単語を大文字・小文字を区別せずに含む行をすべて表示してください。

解答例

user01@ubuntu:~$ grep -i '\bthe\b' example.txt
The quick brown fox jumps over the lazy dog

解説

  • -iオプションで大文字・小文字を区別しない検索を行います。
  • \b を使って単語としてのtheにマッチします。

不要なファイルの削除

作業が完了したら、作成したファイルを削除します。

user01@ubuntu:~$ rm example.txt

まとめ

  • grepコマンドは、正規表現を活用することで高度なパターンマッチングが可能です。
  • オプションの活用
    -i:大文字・小文字を区別しない検索
    -v:パターンにマッチしない行を表示
    -E:拡張正規表現を使用
  • 正規表現のメタ文字
    ^$:行の先頭、行の末尾
    .:任意の1文字
    *+?{n,m}:繰り返し
    []:文字クラス
    |:OR条件
    ():グループ化
    ・\b:単語境界
  • 正規表現を組み合わせることで、複雑なパターンにも対応可能

 演習を通して、grepコマンドと正規表現の理解を深め、実践的なスキルを習得しましょう。これで、grepコマンドの総合演習を終了します。