クリップボードにコピーしました!
文字列のgrep

grepで行番号を表示する方法を徹底解説

updated: 2026/06/03 created: 2026/06/03

はじめに

grepはテキスト検索で頻繁に利用されるコマンドです。

特に検索結果がどの行に存在するのかを確認したい場面では、行番号の表示機能が役立ちます。

本記事では、grepで行番号を表示する基本構文から応用までを解説します

参考:GNU grep

grepで行番号を表示する基本構文

ファイル作成

cat << 'EOF' > input.txt apple banana grape banana smoothie orange EOF

実行コマンド

grep -n "banana" input.txt

実行結果

2:banana
4:banana smoothie

仕組み

項目 内容
grep 指定した文字列を検索する
-n 一致した行の先頭に行番号を表示する
"banana" 検索対象の文字列
input.txt 検索対象のファイル

解説

grep -n を使用すると、検索結果とあわせて行番号を表示できます。
設定ファイルやログファイルから該当箇所を素早く特定したい場合に便利です。

grepで行番号付きの検索結果をファイル名込みで表示する

ファイル作成

cat << 'EOF' > input.txt apple banana orange apple juice grape EOF

実行コマンド

grep -nH "apple" input.txt

実行結果

input.txt:1:apple
input.txt:4:apple juice

仕組み

オプション 説明
grep 指定した文字列を検索するコマンド
-n 一致した行の行番号を表示する
-H 検索結果の先頭にファイル名を表示する
"apple" 検索キーワード
input.txt 検索対象ファイル

解説

grep -nH を使用すると、検索結果に行番号とファイル名を同時に表示できます。
複数ファイルを検索する際に、どのファイルの何行目に一致したかを素早く確認できます。

grepで複数ファイルの行番号を一覧表示する

ファイル作成

cat << 'EOF' > file1.txt apple banana orange banana EOF

ファイル作成

cat << 'EOF' > file2.txt grape banana melon EOF

ファイル作成

cat << 'EOF' > file3.txt banana peach banana EOF

実行コマンド

grep -n "banana" file1.txt

実行結果

2:banana
4:banana

実行コマンド

grep -n "banana" file2.txt

実行結果

2:banana

実行コマンド

grep -n "banana" file3.txt

実行結果

1:banana
3:banana

実行コマンド

grep -n "banana" file*.txt

実行結果

file1.txt:2:banana
file1.txt:4:banana
file2.txt:2:banana
file3.txt:1:banana
file3.txt:3:banana

仕組み

項目 内容
grep テキスト検索を行うコマンド
-n 一致した行の行番号を表示するオプション
file*.txt file1.txt、file2.txt、file3.txt をまとめて指定
出力形式 ファイル名:行番号:一致した行
利用用途 複数ファイルから対象文字列の位置を一覧確認する

解説

grep -n を使用すると、一致した文字列の行番号を確認できます。
複数ファイルを同時に指定すると、ファイル名と行番号が表示されるため、該当箇所を素早く特定できます。

grepでディレクトリ配下を再帰検索しながら行番号を表示する

ファイル作成

cat << 'EOF' > input.txt src/main.py:10:def main(): src/main.py:25:print("hello") src/utils/helper.py:8:def helper(): docs/readme.md:15:grepの使い方 logs/app.log:100:ERROR failed EOF

ファイル作成

mkdir -p src/utils docs logs

ファイル作成

awk -F: '{print $2 ":" $3}' input.txt > src/main.py

ファイル作成

awk -F: 'NR==3{print $2 ":" $3}' input.txt > src/utils/helper.py

ファイル作成

awk -F: 'NR==4{print $2 ":" $3}' input.txt > docs/readme.md

ファイル作成

awk -F: 'NR==5{print $2 ":" $3}' input.txt > logs/app.log

実行コマンド

grep -rn "grep" .

実行結果

src/main.py:4:15:grepの使い方
docs/readme.md:1:15:grepの使い方

実行コマンド

grep -rn "def" .

実行結果

src/utils/helper.py:1:8:def helper()
src/main.py:1:10:def main()
src/main.py:3:8:def helper()

仕組み

項目 内容
grep テキストを検索するコマンド
-r ディレクトリ配下を再帰的に検索
-n 一致した行の行番号を表示
"grep" 検索対象の文字列
. カレントディレクトリ以下を検索

解説

grep -rn を使用すると、ディレクトリ配下を再帰的に検索しながら一致した行の行番号を表示できます。
ソースコード調査や設定ファイル検索でよく利用されます。

grepで単語一致時のみ行番号を表示する

ファイル作成

cat << 'EOF' > input.txt apple banana orange apple pie grape apple EOF

実行コマンド

grep -nx "apple" input.txt

実行結果

1:apple
6:apple

仕組み

オプション 説明
grep 指定した文字列を検索する
-n 一致した行の行番号を表示する
-x 行全体が検索文字列と完全一致した場合のみ一致とする
"apple" 検索対象の文字列
input.txt 検索対象ファイル

解説

-x を使用することで、apple pie のような部分一致を除外し、apple と完全一致する行だけを対象にできます。

-n を組み合わせることで、一致した行の行番号のみを確認できます。

grepで大文字小文字を無視して行番号を表示する

ファイル作成

cat << 'EOF' > input.txt Apple banana APPLE Orange apple pie EOF

実行コマンド

grep -in "apple" input.txt

実行結果

1:Apple
3:APPLE
5:apple pie

仕組み

オプション 説明
grep 指定した文字列を含む行を検索する
-i 大文字・小文字を区別せずに検索する
-n 一致した行の行番号を表示する
"apple" 検索するキーワード
input.txt 検索対象のファイル

解説

grep -in を使用すると、大文字小文字を無視して検索し、一致した行の行番号も同時に表示できます。
ログ解析や設定ファイルの調査で対象行の位置を素早く特定する際に便利です。

grepで正規表現を使って特定パターンの行番号を検索する

ファイル作成

cat << 'EOF' > input.txt apple banana error: file not found orange warning: low disk space grape error: permission denied melon EOF

実行コマンド

grep -n '^error:' input.txt

実行結果

3:error: file not found
7:error: permission denied

仕組み

要素 内容
grep テキストから条件に一致する行を検索するコマンド
-n 一致した行の先頭に行番号を表示する
^ 行頭を表す正規表現
error: 検索対象の文字列
'^error:' 「error:」で始まる行のみを抽出する正規表現

解説

grep -n を使用すると、一致した行と行番号を同時に確認できます。
正規表現を組み合わせることで、ログファイルなどから特定パターンの行を効率よく検索できます。

grepで複数キーワードの行番号をOR条件で検索する

ファイル作成

cat << 'EOF' > input.txt grepは文字列検索を行うコマンドです sedは行編集を行います 行番号を表示したい場合は-nオプションを利用します awkでも行番号を扱えます grepで複数キーワードを検索できます EOF

実行コマンド

grep -nE 'grep|行|番号' input.txt

実行結果

1:grepは文字列検索を行うコマンドです
2:sedは行編集を行います
3:行番号を表示したい場合は-nオプションを利用します
4:awkでも行番号を扱えます
5:grepで複数キーワードを検索できます

仕組み

要素 内容
grep テキスト検索コマンド
-n 一致した行の先頭に行番号を表示
-E 拡張正規表現を有効化
grep|行|番号 OR条件(grep または 行 または 番号)
input.txt 検索対象ファイル

解説

grep -nE を使用すると、複数キーワードを | で連結して OR 条件検索できます。
一致した行には行番号が付与されるため、対象箇所を素早く特定できます。

grepで複数キーワードの行番号をAND条件で検索する

ファイル作成

cat << 'EOF' > input.txt grepの基本的な使い方 grepで行番号を表示するには -n を使用 awkで行番号を扱う方法 grep 行番号 の組み合わせ例 grepで複数条件を検索 行番号付きでgrep検索を実行 sedとgrepを組み合わせる grep 行 番号 を含むサンプル grepのみを含む行 行番号のみを含む行 EOF

実行コマンド

grep -n 'grep' input.txt | grep '行' | grep '番号'

実行結果

2:grepで行番号を表示するには -n を使用
4:grep 行番号 の組み合わせ例
6:行番号付きでgrep検索を実行
8:grep 行 番号 を含むサンプル

仕組み

項目 内容
grep -n 'grep' input.txt grep を含む行を検索し、行番号を表示する
grep '行' 前段の結果から 行 を含む行だけを抽出する
grep '番号' さらに 番号 を含む行だけを抽出する
パイプ (|) 前のコマンドの出力を次のコマンドへ渡す
AND検索 すべての grep 条件を通過した行のみが残る

解説

複数キーワードのAND検索は、grep をパイプで連結することで実現できます。
-n オプションを付与すると、一致した行の行番号を同時に確認できます。

grepで一致しない行番号を表示する方法

ファイル作成

cat << 'EOF' > input.txt apple orange banana grape EOF

実行コマンド

grep -vn "apple" input.txt

実行結果

2:orange
3:banana
4:grape

仕組み

オプション 説明
grep パターン検索を行う
-v 一致しない行を表示する
-n 行番号を先頭に表示する
"apple" 除外したい検索文字列
input.txt 検索対象ファイル

解説

grepの-vは検索条件に一致しない行を抽出し、-nはその行番号を表示します。
そのため、一致しない行の番号と内容を同時に確認できます。

grepで行番号付きで前後の行を表示する方法

ファイル作成

cat << 'EOF' > input.txt apple banana orange grape banana melon banana peach EOF

実行コマンド

grep -n -B 1 -A 1 "banana" input.txt

実行結果

1-apple
2:banana
3-orange
4-grape
5:banana
6-melon
7:banana
8-peach

実行コマンド

grep -n -C 2 "banana" input.txt

実行結果

1-apple
2:banana
3-orange
4-grape
5:banana
6-melon
7:banana
8-peach

仕組み

オプション 説明
-n 一致した行に行番号を表示する
-B <数> 一致行の前に指定した行数を表示する
-A <数> 一致行の後に指定した行数を表示する
-C <数> 一致行の前後に指定した行数を表示する

解説

grep の -n オプションを使用すると一致した行の行番号を確認できます。

-A、-B、-C を組み合わせることで、一致行の前後の文脈もあわせて確認できます。

grepで最初に一致した行番号を取得する方法

ファイル作成

cat << 'EOF' > input.txt apple banana orange banana smoothie grape EOF

実行コマンド

grep -nm1 "banana" input.txt

実行結果

2:banana

実行コマンド

grep -nm1 "banana" input.txt | cut -d: -f1

実行結果

2

仕組み

項目 内容
grep パターンに一致する行を検索する
-n 一致した行の行番号を表示する
-m1 最初の1件が見つかった時点で検索を終了する
cut -d: -f1 行番号:内容 の形式から行番号のみ取得する
結果 最初に一致した banana の行番号 2 を取得できる

解説

grep -n で行番号付きの検索結果を出力し、-m1 を組み合わせることで最初に一致した行だけを取得できます。
行番号のみが必要な場合は cut で抽出します。

grepで最後に一致した行番号を取得する方法

ファイル作成

cat << 'EOF' > input.txt apple banana orange banana grape banana EOF

実行コマンド

grep -n 'banana' input.txt | tail -n 1

実行結果

6:banana

実行コマンド

grep -n 'banana' input.txt | tail -n 1 | cut -d: -f1

実行結果

6

仕組み

項目 内容
grep -n 一致した行を「行番号:内容」の形式で出力する
grep -n 'banana' input.txt banana に一致する全行を取得する
tail -n 1 一致した結果の最後の1行を取得する
cut -d: -f1 区切り文字 : の前(行番号)だけを取得する
結果 最後に一致した banana の行番号 6 を取得できる

解説

grep 単体では最後に一致した行番号だけを直接取得できないため、tail -n 1 を組み合わせます。さらに cut を利用すると、行内容を除いた行番号のみを取得できます。

grepで一致した行番号だけをawkで抽出する方法

ファイル作成

cat << 'EOF' > input.txt apple banana orange banana grape banana EOF

実行コマンド

grep -n 'banana' input.txt

実行結果

2:banana
4:banana
6:banana

実行コマンド

grep -n 'banana' input.txt | awk -F: '{print $1}'

実行結果

2
4
6

仕組み

コマンド 役割
grep -n 'banana' input.txt 一致した行と行番号を 行番号:内容 の形式で出力
awk -F: '{print $1}' 区切り文字を : にして1列目(行番号)だけを抽出
grep -n 'banana' input.txt | awk -F: '{print $1}' 一致した行番号のみを取得

解説

grepの-nオプションを使用すると一致した行に行番号を付与できます。
その出力をawkで加工することで、一致した行番号だけを簡単に抽出できます。

grepとsedで行番号を利用して特定行を編集する方法

ファイル作成

cat << 'EOF' > input.txt apple banana orange grape melon EOF

実行コマンド

grep -n '^orange$' input.txt

実行結果

3:orange

実行コマンド

sed -i '' '3s/orange/lemon/' input.txt

実行コマンド

cat input.txt

実行結果

apple
banana
lemon
grape
melon

仕組み

項目 内容
grep -n 各行の先頭に行番号を付与して表示する
^orange$ 完全一致で orange の行を検索する
3:orange 3行目に orange が存在することを示す
sed '3s/orange/lemon/' 3行目の orange を lemon に置換する
-i ファイルを直接更新する

解説

grep -n を利用すると対象文字列の行番号を確認できます。
確認した行番号を sed に渡すことで、特定行のみを安全に編集できます。

grepで巨大ファイルの行番号検索を高速化するコツ

ファイル作成

cat << 'EOF' > input.txt INFO startup completed INFO loading modules ERROR database connection failed INFO retrying connection INFO retry successful WARN disk usage 80% INFO processing request ERROR timeout detected INFO processing request INFO shutdown completed EOF

実行コマンド

grep -n "ERROR" input.txt

実行結果

3:ERROR database connection failed
8:ERROR timeout detected

実行コマンド

LC_ALL=C grep -n "ERROR" input.txt

実行結果

3:ERROR database connection failed
8:ERROR timeout detected

実行コマンド

grep -n -m 1 "ERROR" input.txt

実行結果

3:ERROR database connection failed

仕組み

コツ 仕組み 効果
-n 一致した行の行番号を同時に表示 grep 行 番号の確認を即座に実施
LC_ALL=C ロケール処理を無効化しバイト単位で検索 巨大ファイル検索を高速化
-m 1 指定件数で検索を打ち切る 最初の一致だけ探す場合に高速
検索文字列を具体化 不要なマッチ判定を削減 CPU負荷を低減
圧縮ファイル以外を対象化 展開処理を回避 I/O時間を短縮

解説

巨大ファイルで grep 行 番号検索を行う場合は、LC_ALL=C によるロケール無効化が最も効果的な高速化手法の一つです。

最初の一致だけ必要な場合は -m オプションを併用すると無駄な走査を避けられます。

grepで行番号を表示するポイントまとめ

grepの行番号表示は、検索対象の位置を素早く把握するための基本機能です。

単一ファイルだけでなく複数ファイルやディレクトリ全体の検索にも活用できます。

また、正規表現や条件検索、awkやsedとの組み合わせによって、より高度なテキスト処理が可能になります。

grepの行番号機能を使いこなせれば、ログ解析や設定ファイルの確認作業を効率的に進められるようになります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

©︎ 2025-2026 running terminal commands