このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
新Linuxコマンド演習39

新Linuxコマンド演習39 概要
「新Linuxコマンド演習39」では、grepコマンドを使用してファイル内のテキストを検索する方法を学びます。
grepは「Global Regular Expression Print」の略で、指定した 正規表現(パターン) に一致する行を抽出するコマンドです。
Linuxでテキストデータを扱う上で非常に重要なコマンドであり、ログ解析・設定ファイル検索・スクリプト調査などで頻繁に利用されます。

grepコマンドの概要
コマンド書式
grep [オプション] パターン [ファイル名]主なオプション
| 項目 | 内容 |
|---|---|
| -i | 大文字・小文字を区別せずに検索 |
| -v | パターンに一致しない行を表示 |
| -n | 一致した行の行番号を表示 |
| -r | 指定したディレクトリ以下を再帰的に検索 |
| -c | 一致した行の件数を表示 |
| --color | 一致部分を色付きで表示(多くの環境でデフォルト) |
表の説明
grepコマンドは、テキストデータの中から特定のパターンを抽出するツールです。
-i で大文字小文字を無視した検索、-n で行番号の表示、-r でディレクトリ内を再帰検索するなど、状況に応じて柔軟に使い分けられます。
また、正規表現を組み合わせることで、より高度なパターンマッチングが可能になります。
演習問題+模範解答例
演習01:「www」という文字列を含む行を検索する
問題
/etc/services ファイル内から「www」という文字列を含む行を検索してください。
模範解答例
[suzuki@AlmaLinux ~]$ grep www /etc/services
# http://www.iana.org/assignments/port-numbers
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
www-ldap-gw 1760/tcp # www-ldap-gw
www-ldap-gw 1760/udp # www-ldap-gw
www-dev 2784/tcp # world wide web - development
www-dev 2784/udp # world wide web - development
flirtmitmir 3840/tcp # www.FlirtMitMir.de
flirtmitmir 3840/udp # www.FlirtMitMir.de解説
- grepコマンドは、指定したパターンを含む行を抽出します。
- この場合は「www」という文字列を含むすべての行を表示します。
- コメント行(#で始まる)も一致対象になります。
演習02:大文字小文字を区別せずに検索する
問題
/etc/services ファイル内から、大文字・小文字を区別せずに「www」を含む行を検索してください。
模範解答例
[suzuki@AlmaLinux ~]$ grep -i www /etc/services
# http://www.iana.org/assignments/port-numbers
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
webcache 8080/tcp http-alt # WWW caching service
webcache 8080/udp http-alt # WWW caching service
www-ldap-gw 1760/tcp # www-ldap-gw
www-ldap-gw 1760/udp # www-ldap-gw
www-dev 2784/tcp # world wide web - development
www-dev 2784/udp # world wide web - development
flirtmitmir 3840/tcp # www.FlirtMitMir.de
flirtmitmir 3840/udp # www.FlirtMitMir.de解説
- -i オプションは大文字・小文字を区別しません。
- そのため「www」だけでなく「WWW」も一致します。
演習03:特定のユーザー名を含む行を検索する
問題
/etc/passwd ファイル内から、ユーザー名「suzuki」を含む行を検索してください。
模範解答例
[suzuki@AlmaLinux ~]$ grep suzuki /etc/passwd
suzuki:x:1000:1000:suzuki:/home/suzuki:/bin/bash解説
- /etc/passwd は、システムに登録されたユーザー情報を保持するファイルです。
- grepを使うことで、特定のユーザー情報を簡単に確認できます。
- 例えば、ユーザーが存在しない場合は何も出力されません。
演習04:複数ファイルをまとめて検索する
問題
/etc/default ディレクトリ内の複数ファイルから「bash」を含む行を検索してください。
模範解答例
[suzuki@AlmaLinux ~]$ grep bash /etc/default/*
/etc/default/useradd:SHELL=/bin/bash解説
- * はメタキャラクタで、ディレクトリ内のすべてのファイルを対象とします。
- 結果には、ファイル名と一致した行の内容がセットで表示されます。
- : で区切られた前半がファイル名、後半が一致した行です。
演習05:grepによる絞り込み検索
問題
locate コマンドで「hosts」を検索し、結果の中から /etc 以下のファイルのみをgrepで抽出してください。
模範解答例
[suzuki@AlmaLinux ~]$ locate hosts | grep '^/etc'
/etc/hosts
/etc/avahi/hosts
/etc/chromium/native-messaging-hosts
/etc/chromium/native-messaging-hosts/org.gnome.browser_connector.json
/etc/chromium/native-messaging-hosts/org.gnome.chrome_gnome_shell.json
/etc/opt/chrome/native-messaging-hosts
/etc/opt/chrome/native-messaging-hosts/org.gnome.browser_connector.json
/etc/opt/chrome/native-messaging-hosts/org.gnome.chrome_gnome_shell.json
/etc/samba/lmhosts解説
- | はパイプで、前のコマンドの出力を次のコマンドの入力として渡します。
- ^/etc は「行の先頭( ^ )が /etc で始まる行」を意味する正規表現です。
- locateで得た大量の結果から、目的のパスのみを効率的に抽出できます。
grepで使える主な正規表現(抜粋)
| パターン | 意味 | 例 |
|---|---|---|
| ^文字列 | 行頭に一致 | ^root → 行頭がrootの行 |
| 文字列$ | 行末に一致 | bash$ → 行末がbashの行 |
| . | 任意の1文字に一致 | h.t → hit, hotなど |
| .* | 任意の文字列に一致 | h.*o → hello, heroなど |
| [abc] | a, b, cのいずれか1文字に一致 | [ch]at → cat, hat |
| [^abc] | a, b, c以外の1文字に一致 | [^a-z] → 小文字以外 |
表の説明
grepは正規表現を使うことで、単純な文字列検索を超えた柔軟な検索が可能です。
例えば、行頭を表す ^ や行末を表す $ を組み合わせることで、ログ解析や設定確認を効率化できます。
まとめ
「新Linuxコマンド演習39」では、grepコマンドを用いた文字列検索と正規表現の基礎を学びました。
学習したポイント
- grepコマンドの基本構文と主要オプション(-i, -n, -r, -v など)
- 正規表現を活用した柔軟なパターン検索
- パイプ( | )を使った絞り込み検索の実践
grepは、Linuxでテキスト処理を行う際の必須ツールです。
