このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:grepコマンドと正規表現

grepコマンドと正規表現
Linuxシステムでは、大量のテキストファイルを扱うことが日常的です。特定のパターンに一致するデータを効率的に抽出するために、grep
コマンドと正規表現は不可欠なツールです。ここでは、grep
コマンドの概要と、正規表現を用いた高度な検索方法について解説します。

grepコマンドの概要
grep
(global regular expression print)は、指定したパターンにマッチする行を検索し、表示するためのコマンドです。テキスト処理において頻繁に使用され、正規表現と組み合わせることで複雑な検索条件にも対応できます。
【書式】grep [オプション] <検索パターン> <ファイル名>
<検索パターン>
:検索したい文字列や正規表現を指定します。<ファイル名>
:検索対象のファイルを指定します。
正規表現とは
正規表現は、文字列のパターンを表現するための特殊な記法です。単なる固定文字列だけでなく、特定の条件に合致する文字列を柔軟に検索できます。
正規表現の例
- 「行の先頭が
host
で始まる行を検索したい」 - 「アルファベットのみで構成され、数字を含まない行を抽出したい」
これらの条件を満たす文字列を検索するために、正規表現を使用します。
正規表現の基本メタ文字
メタ文字 | 意味 |
---|---|
^ | 行の先頭を示す |
$ | 行の末尾を示す |
. | 任意の一文字 |
* | 直前の文字の0回以上の繰り返し |
[] | 文字クラス。中のいずれか一文字にマッチ |
[^] | 否定の文字クラス。中の文字以外の一文字にマッチ |
使用例
例:行の先頭が host
で始まる行を検索
^
を使用して、行の先頭を指定します。
user01@ubuntu:~$ ls /etc | grep '^host'
host.conf
hostname
hosts
hosts.allow
hosts.deny
解説
'host'
の前に^
を付けて'^host'
とすることで、「行の先頭がhost
で始まる行」を検索します。"ghostscript"
はhost
が行の途中にあるため、検索結果から除外されます。
シェルによる解釈を避けるためのクォート
正規表現には、^
や $
などのメタ文字が含まれます。これらはシェルでも特別な意味を持つ場合があるため、シェルによる解釈を避けるために、検索パターンをシングルクォート ' '
で囲みます。
クォートの例
grep '^host' example.txt
- 注意点:クォートしない場合、シェルがメタ文字を解釈し、意図しない動作となる可能性があります。
クォートしない場合の問題点
問題の例
user01@ubuntu:~$ grep host* example.txt
解説
host*
はシェルによってファイル名に展開されてしまいます。- 例えば、カレントディレクトリに
host.txt
やhost.sh
が存在すると、以下のように展開されます。
grep host.txt host.sh example.txt
結果:grep
コマンドは意図しないファイルを検索対象としてしまいます。
解決策:クォートを使用する
user01@ubuntu:~$ grep 'host*' example.txt
解説:検索パターンを ' '
で囲むことで、シェルによるパターンの解釈を防ぎ、grep
コマンドに正しくパターンを渡せます。
実践例
ステップ1:example.txt
を作成
user01@ubuntu:~$ nano example.txt
example.txt
の内容
host.conf
hostname
hosts
hosts.allow
hosts.deny
ステップ2:空のファイルを作成
user01@ubuntu:~$ touch host.txt host.sh
ステップ3:クォートなしで実行した場合
user01@ubuntu:~$ grep host* example.txt
user01@ubuntu:~$
- 結果:何も表示されない、または意図しない結果となる。
ステップ4:クォートして実行した場合
user01@ubuntu:~$ grep 'host*' example.txt
host.conf
hostname
hosts
hosts.allow
hosts.deny
解説
クォートすることで、grep
は正しくパターン host*
を解釈し、期待した検索結果を得られます。
ステップ5:不要なファイルの削除
user01@ubuntu:~$ rm example.txt host.txt host.sh
まとめ
- 正規表現は、複雑なパターンマッチングを可能にする強力なツールです。
grep
コマンドと正規表現を組み合わせることで、柔軟なテキスト検索が可能になります。- メタ文字を使用する際は、シェルによる解釈を避けるために、検索パターンをシングルクォートで囲みましょう。
- 正規表現を正しく使いこなすことで、効率的なテキスト処理が可能になります。
grep
コマンドと正規表現を活用して、日々の業務でのテキスト検索やログ解析を効率化しましょう。正規表現の習得は一朝一夕ではありませんが、その価値は計り知れません。