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

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)を使う必要があります。

関連記事:
カテゴリの一覧へ
新着記事
New1
ファイル・ディレクトリ操作
basenameの--zeroオプションでヌル文字区切り!xargsと安全に連携するLinuxの基本
New2
ファイル・ディレクトリ操作
find -userオプションの使い方を完全ガイド!初心者でもわかる所有者ユーザーでファイルを検索する方法
New3
ファイル・ディレクトリ操作
find -okオプションとは?初心者向けに丁寧解説!Linuxで確認付きコマンド実行をマスターしよう
New4
ファイル・ディレクトリ操作
dirname --zeroオプション|出力をヌル文字で区切る方法
人気記事
No.1
Java&Spring記事人気No1
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.2
Java&Spring記事人気No2
ファイル・ディレクトリ操作
rmコマンドとは?Linuxでファイルやディレクトリを削除する基本
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
cdコマンドとは?Linuxでディレクトリを移動する基本を初心者向けに解説
No.4
Java&Spring記事人気No4
ファイル・ディレクトリ操作
cd ~ の使い方を完全解説!ホームディレクトリへの移動方法と初心者向けLinuxコマンド入門