ファイルやテキストストリーム内のテキストのパターンを検索することは、システム管理者の仕事の中でも、特に一般的なタスクの 1 つです。さまざまなシステム設定の確認、データの分析、ログのトラブルシューティングをはじめとする、さまざまな作業を可能にする重要なスキルです。
Linux システムでテキスト検索に最も広く使用される方法は、コマンドライン・ユーティリティである grep
を使用するやり方です。このユーティリティは元々、1970 年代初頭に UNIX オペレーティングシステム向けに開発されたものです。grep は時を経て進化し、現在 Linux で最も一般的に利用されているバージョンである GNU grep は、色付き出力などの追加機能を備えています。しかし、その主たる機能は今も変わりません。
grep
を使用すると、単一ファイル、ファイルグループ、または stdin
のテキストの中から、正規表現に一致するテキストをシェルパイプ演算子を使ってすばやく見つけられます。
この記事では、grep
コマンドを使ったテキストの検索方法を説明します。
ファイル内のテキストを検索する
grep
の最も基本的な使い方が、単一ファイル内のテキスト検索です。この場合、grep
と入力し、それに続けて検索するテキストパターンと検索するファイル名を入力します。たとえば、Secure Shell (SSH) デーモンがどのポートを使用しているかを確認するには、/etc/ssh/sshd_config
ファイル内で Port
を検索します。
$ grep Port /etc/ssh/sshd_config
Port 22
#GatewayPorts no
ご覧のように grep
は、テキストパターンの位置にかかわらず、そのパターンに一致するすべての行を見つけます。
[Linux grep コマンドチートシートをダウンロード ]
正規表現を使って grep を拡張する
先ほどの例では、SSH 設定ファイルで Port
を検索すると、grep
は 2 つの行を返しました。探していた行である Port 22 と、同じ検索パターンを含むもう 1 つの行です。場合によってはこのように、すべてを検索したいケースもあるでしょう。一方で、grep
では関係のないエントリーが多く見つかるため、それをかき分けて必要な情報を見つけなければならない場合もあります。
それを避けるため、正規表現を使って、検索対象をより具体的に指定できます。たとえば、Port
という単語で始まる行のみを検索するには、次のように正規表現の演算子 ^
を使います。
$ grep ^Port /etc/ssh/sshd_config
Port 22
この場合、grep
からは Port
で始まる行のみが返されます。2 番目の行では Port
は行の途中にあるからです。
また、コマンドライン・パラメーター -E
を使った拡張正規表現を使用することもできます。たとえば、Port
の後に数字が続くパターンを検索するには、次の正規表現を使用します。
$ grep -E "Port [1-9]+" /etc/ssh/sshd_config
Port 22
また、$
演算子を使って、あるテキストパターンで終わる行を検索することもできます。たとえば、sshd_config
ファイル内にある none
で終わる行をすべて見つけるには、次のように grep
を使用します。
$ grep none$ /etc/ssh/sshd_config
#RekeyLimit default none
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#ChrootDirectory none
#VersionAddendum none
#Banner none
正規表現は、grep
の重要な要素であり、効果的で柔軟な検索を可能にしてくれます。ただし、正規表現はきわめて大きなテーマです。さらに詳しい情報は、Wikipedia の「正規表現」のページまたは「Regular expressions 101」をご覧ください。
複数のファイルやディレクトリからテキストを検索する
単一ファイル内のテキストパターンを見つけるのと同様に、grep
を使って、複数のファイルやディレクトリ内のテキストを検索できます。複数のファイルから同時にテキストを検索するには、最初のファイル名の後に検索対象のファイルを指定するか、すべてのファイルを対象とする場合は、シェルワイルドカード (*
など) を使用します。たとえば、2 つのファイルで設定を検索するには、次のようにします。
$ grep Port /etc/ssh/sshd_config /etc/ssh/ssh_config
/etc/ssh/sshd_config:Port 22
/etc/ssh/sshd_config:#GatewayPorts no
/etc/ssh/ssh_config:# Port 22
複数のファイルを検索すると、grep
からは一致が見つかったファイル名の後に一致した行が表示されます。
[ よく使うコマンドをすぐに確認できる Linux コマンドチートシート ]
複数のサブディレクトリで再帰的に検索を実行するには、コマンドラインフラグ -R
を使います。
$ grep -R ^Port /etc
/etc/ssh/sshd_config:Port 22
grep
コマンドは高速で、すぐに結果が返されますが、検索対象として指定するファイルやサブディレクトリの数が多すぎると、時間がかかる場合があります。
別のコマンドの出力に含まれるテキストを検索する
他の UNIX ユーティリティと同様に grep
も、別のコマンドの出力を grep にパイプで渡すことで stdin
に対して機能します。この方法によって、すばやく簡単にコマンドの出力結果をフィルタリングして、探しているテキストパターンとの一致を見つけられます。
たとえば、Fedora または Red Hat Enterprise Linux (RHEL) オペレーティングシステムに openssh
パッケージがインストールされているかどうかを確認したい場合、インストール済みのパッケージをすべてリストアップするコマンド rpm -qa
の出力を grep
にパイプで渡し、パターンを検索できます。
$ rpm -qa | grep ssh
libssh-config-0.9.6-4.fc36.noarch
libssh-0.9.6-4.fc36.x86_64
openssh-8.8p1-1.fc36.1.x86_64
コマンドの長い出力結果も、grep
でフィルタリングできるため、必要な情報を探しやすくなります。
[ Linux にアプリケーションをインストールするためのガイドを入手する ]
その他の役立つオプション
grep
コマンドには、パターンを検索する方法や結果の表示方法を変更するためのさまざまなオプションが用意されています。この記事では、その一部を取り上げました。すべてのオプションをここで紹介することはできませんが、他にも便利なオプションがあります。
-i
オプションは、大文字と小文字を区別しない検索を行う際に使用します。-v
オプションは、検索内容を反転し、パターンに一致しない行を表示します。-w
オプションは、他の単語の途中にあるパターンではなく、単語全体のみを検索できます。--color
オプションは、一致するパターンを色付きで出力し、見つけやすくします。
grep
の全オプションのリストについては、man ページを参照してください。
次のステップ
GNU grep ユーティリティは柔軟で便利なツールであり、日々のシステム管理業務におけるさまざまなタスクの遂行に役立ちます。grep
は使うほどに使い勝手の良さがわかり、気付けばいつも活用するツールになっていること間違いありません。
grep
について詳しくは、以下のリンクを参照してください。
Linux システムにおける grep
の詳細については、man grep
を参照するか、tldr
ツールで手軽に見られる役立つ例をご覧ください。
執筆者紹介
Ricardo Gerardi is a Principal Consultant at Red Hat, having transitioned from his previous role as a Technical Community Advocate for Enable Sysadmin. He's been at Red Hat since 2018, specializing in IT automation using Ansible and OpenShift.
With over 25 years of industry experience and 20+ years as a Linux and open source enthusiast and contributor, Ricardo is passionate about technology. He is particularly interested in hacking with the Go programming language and is the author of Powerful Command-Line Applications in Go and Automate Your Home Using Go. Ricardo also writes regularly for Red Hat and other blogs, covering topics like Linux, Vim, Ansible, Containers, Kubernetes, and command-line applications.
Outside of work, Ricardo enjoys spending time with his daughters, reading science fiction books, and playing video games.
類似検索
チャンネル別に見る
自動化
テクノロジー、チームおよび環境に関する IT 自動化の最新情報
AI (人工知能)
お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート
オープン・ハイブリッドクラウド
ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。
セキュリティ
環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報
エッジコンピューティング
エッジでの運用を単純化するプラットフォームのアップデート
インフラストラクチャ
世界有数のエンタープライズ向け Linux プラットフォームの最新情報
アプリケーション
アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細
オリジナル番組
エンタープライズ向けテクノロジーのメーカーやリーダーによるストーリー
製品
ツール
試用、購入、販売
コミュニケーション
Red Hat について
エンタープライズ・オープンソース・ソリューションのプロバイダーとして世界をリードする Red Hat は、Linux、クラウド、コンテナ、Kubernetes などのテクノロジーを提供しています。Red Hat は強化されたソリューションを提供し、コアデータセンターからネットワークエッジまで、企業が複数のプラットフォームおよび環境間で容易に運用できるようにしています。
言語を選択してください
Red Hat legal and privacy links
- Red Hat について
- 採用情報
- イベント
- 各国のオフィス
- Red Hat へのお問い合わせ
- Red Hat ブログ
- ダイバーシティ、エクイティ、およびインクルージョン
- Cool Stuff Store
- Red Hat Summit