カテゴリ: Linuxコマンド集 更新日: 2026/04/07

grep -oオプションの使い方|一致部分のみを抜き出す方法を初心者向けに解説

grep -oオプション|一致部分のみを表示する
grep -oオプション|一致部分のみを表示する

先生と生徒の会話形式で理解しよう

生徒

「grepコマンドで、検索に一致した部分だけを取り出すことってできますか?」

先生

「できますよ。そのときに使うのが-oオプションです。」

生徒

「なるほど!でも、通常のgrepとの違いがよく分かりません…」

先生

「それでは、-oオプションの使い方や違いを、分かりやすく説明していきましょう。」

1. grep -oオプションとは?

1. grep -oオプションとは?
1. grep -oオプションとは?

grepコマンドは、ファイルや文字列の中から特定のキーワードを探すLinuxの基本コマンドです。その中でも-oオプションを使うと、検索に一致した「部分」だけを取り出すことができます。

通常のgrepでは、検索キーワードを含む行全体が表示されますが、-oオプションを使うと該当した単語や文字列のみが抜き出されるのです。

2. 基本的なgrep -oの使い方

2. 基本的なgrep -oの使い方
2. 基本的なgrep -oの使い方

まず、簡単な例で違いを見てみましょう。次のようなテキストファイルがあるとします。


cat sample.txt
apple orange banana
orange melon apple

この中から「orange」という単語だけを取り出したいとき、-oなしの通常grepではこうなります:


grep orange sample.txt
apple orange banana
orange melon apple

行全体が表示されているのが分かりますね。

ここで-oをつけてみましょう:


grep -o orange sample.txt
orange
orange

検索に一致した「orange」だけが1行ずつ取り出されています!ピンポイントで欲しい情報だけを抜き出すのに便利です。

3. grep -oはどんな場面で使う?

3. grep -oはどんな場面で使う?
3. grep -oはどんな場面で使う?

以下のような場面で-oオプションが役立ちます。

  • ログファイルから特定のIPアドレスだけを抜き出したいとき
  • HTMLソースからURLだけを一覧にしたいとき
  • 文章中の特定の単語やパターンを集計したいとき

例:IPアドレスを抜き出す


cat access.log
192.168.1.1 - - [12/Sep/2025] "GET /index.html"
10.0.0.2 - - [12/Sep/2025] "POST /login"

grep -o -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' access.log
192.168.1.1
10.0.0.2

-Eは「拡張正規表現」を使うためのオプションで、IPアドレスのような複雑なパターンも扱えるようになります。

4. grep -oと他のオプションを組み合わせよう

4. grep -oと他のオプションを組み合わせよう
4. grep -oと他のオプションを組み合わせよう

-oオプションは、他のオプションと組み合わせて使うことで、より便利になります。

4-1. -i(大文字・小文字を区別しない)

「Orange」「orange」「ORANGE」など、すべて同じと見なして抽出するには、-iと組み合わせます。


grep -oi orange sample.txt
orange
orange

4-2. -r(ディレクトリを再帰的に検索)

複数ファイルの中から特定の文字列を探したいときは、-r(recursive=再帰的)と組み合わせて使います。


grep -ro 'href' ./html/
./html/index.html:href
./html/about.html:href

-oがあることで「href」だけが結果に表示されています。

5. grep -oとcut・awk・sedとの違い

5. grep -oとcut・awk・sedとの違い
5. grep -oとcut・awk・sedとの違い

cutawksedなども文字列を抜き出すコマンドとして使われますが、grep -oはあくまで「パターンにマッチした部分だけを抽出する」ことに特化しています。

  • cut:文字数や区切り文字で列を切り取る
  • awk:条件処理や列の操作もできる高機能ツール
  • sed:文字列の置換や抽出ができるストリームエディタ

例えば以下のような比較ができます:


echo 'apple orange banana' | grep -o 'orange'
orange

echo 'apple orange banana' | cut -d' ' -f2
orange

cutは位置が決まっている場合に便利ですが、パターンマッチングができないので、柔軟性ではgrep -oに軍配が上がります。

6. grep -oの注意点

6. grep -oの注意点
6. grep -oの注意点

ただし、grep -oは検索対象が複数マッチする場合は1つずつ分けて表示されます。そのため、行単位の情報が欲しいときには向いていない場面もあります。

また、改行をまたいだ検索には対応していないため、複数行にまたがる情報抽出には別のツール(例:perlawk)を使う必要があります。

まとめ

まとめ
まとめ

今回の記事では、Linux環境でのテキスト操作において非常に強力な武器となる「grep -o」オプションについて詳しく解説してきました。 標準的なgrepコマンドは、指定したパターンが含まれる「行全体」を表示する仕様ですが、この-o(only-matching)オプションを付与することで、「一致した箇所のみ」を抽出することが可能になります。

grep -oオプションの重要ポイントの振り返り

実務においてログ解析や大量のデータ処理を行う際、余計な情報(行の前後にある不要な文字列)を除外して、必要なデータだけをリストアップしたい場面は多々あります。 例えば、エラーコードだけを抜き出す、特定のID番号だけを抽出する、といった作業です。 こうした「ピンポイントな抽出」において、grep -oは最もシンプルかつ直感的に使えるコマンドと言えるでしょう。

実践的な活用例:URLの抽出

具体的な応用例として、テキストファイル内から特定のパターン(ここでは簡易的なhttpリンク)を抜き出す方法を、一般ユーザー権限で実行してみましょう。 正規表現と組み合わせることで、その真価が発揮されます。


echo "Visit https://example.com and http://test.jp for more info." > urls.txt
grep -oE "https?://[a-zA-Z0-9./]+" urls.txt
https://example.com
http://test.jp

このように、文章の中に埋もれたデータであっても、必要な形式(パターン)さえ指定すれば、瞬時に抜き出すことができます。 また、複数のファイルが混在するディレクトリ内を調査する場合は、システム管理者(rootユーザー)として再帰的に検索することもあります。

システム全体を対象とした高度な検索(root権限)

設定ファイルが散らばっている/etcディレクトリ内などで、特定のキーワードだけを効率よく探す場合は、root権限を利用します。


grep -ro "ServerName" /etc/apache2/ | head -n 3
/etc/apache2/sites-available/000-default.conf:ServerName
/etc/apache2/sites-available/default-ssl.conf:ServerName
/etc/apache2/apache2.conf:ServerName

-r(再帰検索)と-oを組み合わせることで、どのファイルのどこにキーワードがあるのかが、非常にスッキリとした形で表示されます。

SEOと作業効率化の観点から

エンジニアにとって、コマンドラインを習得することは、単なる「操作」ではなく「自動化と効率化」への第一歩です。 grep -oを使いこなせるようになると、これまで手作業で行っていたコピペ作業や、目視でのデータ確認が不要になります。 これはプログラミング学習における「生産性の向上」に直結する重要なテクニックです。 まずは簡単な単語の抜き出しから始めて、徐々に正規表現(-Eオプション)を組み合わせた高度な抽出にチャレンジしてみてください。 Linuxのシェル操作は、触れば触るほど自分のスキルとして定着していきます。

最後に、今回学んだ内容をより深く理解するために、先生と生徒の会話で要点をおさらいしてみましょう。 実際の開発現場でどのように使われるのか、イメージを膨らませてみてください。

先生と生徒の振り返り会話

生徒

先生、ありがとうございました!grep -oを使えば、行全体じゃなくて、本当に欲しい「キーワードだけ」を抜き出せるんですね。 これならログファイルがどれだけ長くても、必要な部分だけパッと見つけられそうです。

先生

その通りです。例えば、数万行あるアクセスログから、アクセスしてきたユーザーのブラウザ情報(User-Agent)の一部だけを抜き出してリスト化する、なんてときにも非常に便利ですよ。

生徒

なるほど。でも、抜き出した後に「結局何個見つかったのか」を知りたいときはどうすればいいんですか? 一つずつ数えるのは大変そうです…。

先生

良い質問ですね!そんなときは、他のコマンドと「パイプ(|)」で繋げば解決します。 例えば、wc -lコマンドと組み合わせれば、一致した個数を一瞬でカウントできますよ。


grep -o "error" system.log | wc -l
15

生徒

わあ、すごい!一気に実用性が増しました。 コマンド一つで完結させようとするんじゃなくて、grep -oで「材料を切り出して」、他のコマンドで「料理する」みたいなイメージですね。

先生

素晴らしい例えです!Linuxコマンドはそうやって組み合わせて使うのが真骨頂ですから。 -oオプションは、まさにその「切り出し」に最適なツールなんです。 大文字小文字を無視する-iや、ファイル名も一緒に表示する-Hなど、他のオプションとも仲が良いので、ぜひ色々試して自分の「必殺技」を増やしていってくださいね。

生徒

はい!正規表現も少しずつ勉強して、もっと複雑なパターンも抜き出せるように頑張ります。 まずは自分の開発環境のソースコードから、特定のタグだけを抜き出す練習をしてみます!

先生

その意気です。最初は失敗しても大丈夫。 コマンドを叩いた分だけ、確実にスキルアップしていきますよ。応援していますね!

関連記事:
カテゴリの一覧へ
新着記事
New1
ファイル・ディレクトリ操作
stat -Lオプションの使い方を解説|シンボリックリンクをたどってファイル情報を確認しよう
New2
ファイル・ディレクトリ操作
realpath -eオプションの使い方を解説!Linuxで存在するファイルのみ絶対パスを取得する方法
New3
テキスト処理とフィルタ
tacコマンドの基本!ファイル内容を逆順に表示する方法
New4
テキスト・データ処理
awk -fオプションの使い方を完全ガイド!初心者でもわかるLinuxテキスト処理の基本
人気記事
No.1
Java&Spring記事人気No1
テキスト・データ処理
catコマンドとは?Linuxでファイル内容を表示・連結する基本
No.2
Java&Spring記事人気No2
ファイル・ディレクトリ操作
pwdコマンドとは?初心者でもわかる現在の作業ディレクトリの確認方法を解説!
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.4
Java&Spring記事人気No4
ファイル・ディレクトリ操作
cd ~ の使い方を完全解説!ホームディレクトリへの移動方法と初心者向けLinuxコマンド入門