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

Linux基礎:テキストファイルの内容検索

テキストファイルの内容検索

 Linux ではテキストファイルの中から特定の文字列やパターンを探し出す作業が頻繁に発生します。設定ファイルの確認やログ解析の際に、数千行におよぶファイルを目視で確認するのは現実的ではありません。そこで活躍するのが grep コマンド です。

 grep は「Global Regular Expression Print」の略で、指定した文字列や正規表現に一致する行を抽出して表示します。単なるキーワード検索だけでなく、大文字小文字の区別を無視した検索や、マッチした行数だけを数えるといった多様な使い方が可能です。また、他のコマンドと組み合わせて出力をフィルタリングする用途でも広く利用されます。

1.grep コマンドの基本

1.1. コマンドの書式

grep [オプション] [検索パターン] [検索対象ファイル]

検索パターンには通常の文字列だけでなく、正規表現を用いることもできます。

1.2. 主なオプション

オプション説明
-F検索パターンを正規表現ではなく単純な文字列として扱う。
-cマッチした行の数だけを表示する。
-i大文字と小文字を区別せずに検索する。
-lマッチした行を含むファイル名のみを表示する。
-n行番号を併せて表示する。
-vマッチしなかった行を表示する。

2.grep コマンドの使用例

2.1. ファイルから文字列を検索

例: /etc/hosts ファイルの中から「localhost」を検索

[user@rocky9 ~]$ grep localhost /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

2.2. 大文字小文字を無視して検索

例: /etc/hosts から「LOCALHOST」を検索(-i オプション)

[user@rocky9 ~]$ grep -i LOCALHOST /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

2.3. 複数ファイルをまとめて検索

例: /etc 配下の設定ファイルから「bash」が含まれる行を検索

[user@rocky9 ~]$ grep bash /etc/* 2>/dev/null
/etc/bashrc:# /etc/bashrc
/etc/bashrc:        if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
/etc/bashrc:            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
/etc/bashrc:        if [ -e /etc/sysconfig/bash-prompt-screen ]; then
/etc/bashrc:            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
/etc/bashrc:        [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
/etc/bashrc:    SHELL=/bin/bash
/etc/crontab:SHELL=/bin/bash
/etc/kdump.conf:#             shell:    Drop to a bash shell.
/etc/libuser.conf:# LU_LOGINSHELL = /bin/bash
(省略)

(エラーを避けるため、存在しないファイルは標準エラー出力を捨てています)

2.4. 他コマンドの出力を絞り込み

例: 実行中のプロセス一覧から「sshd」を含む行だけを表示

[user@rocky9 ~]$ ps -ef | grep sshd
root        1075       1  0  9月05 ?      00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
user        6114    3656  0 15:36 pts/0    00:00:00 grep --color=auto sshd

 この例では grep 自身のプロセスも表示されています。これは正常な動作で、grep の検索対象に「sshd」が含まれるためです。

3.grep コマンドの活用テクニック

3.1. 行番号付きで検索結果を表示

[user@rocky9 ~]$ grep -n bash /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
34:user:x:1000:1000:user:/home/user:/bin/bash
37:yamamoto:x:1002:1003::/home/yamamoto:/bin/bash

3.2. マッチした行数だけを表示

[user@rocky9 ~]$ grep -c bash /etc/passwd
3

3.3. マッチしたファイル名のみ表示

[user@rocky9 ~]$ grep -l bash /etc/*
grep: /etc/NetworkManager: ディレクトリです
grep: /etc/PackageKit: ディレクトリです
grep: /etc/UPower: ディレクトリです
grep: /etc/X11: ディレクトリです
grep: /etc/accountsservice: ディレクトリです
grep: /etc/alsa: ディレクトリです
grep: /etc/alternatives: ディレクトリです
grep: /etc/audit: 許可がありません
grep: /etc/authselect: ディレクトリです
grep: /etc/avahi: ディレクトリです
grep: /etc/bash_completion.d: ディレクトリです
(省略)

まとめ

  • grep コマンド はテキストファイルから文字列や正規表現にマッチする行を抽出する基本ツール。
  • 検索結果を行番号付きで表示したり、大文字小文字を区別せずに検索したりすることができる。
  • 他のコマンドと組み合わせることでログ解析やシステム調査に威力を発揮する。
  • システム管理の現場では、grep を使いこなせるかどうかで作業効率が大きく変わる。