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

grepで行頭を検索する方法を徹底解説

updated: 2026/07/22 created: 2026/07/22

grepで行頭を条件に検索できるようになると、設定ファイルやログから必要な行を素早く抽出できます。

しかし、正規表現の意味や記号の使い方でつまずく初学者は少なくありません。

本記事では、基本から応用までを詳しく解説します

参考:GNU grep

grepで行頭を指定する基本構文

ファイル作成

cat << 'EOF' > input.txt apple banana apricot grape Apple avocado EOF

実行コマンド

grep '^a' input.txt

実行結果

apple
apricot
avocado

実行コマンド

grep '^A' input.txt

実行結果

Apple

仕組み

項目 内容
grep 条件に一致する行を検索するコマンド
^ 行頭(各行の先頭)を表す正規表現
^a 行頭が小文字の a で始まる行に一致
^A 行頭が大文字の A で始まる行に一致
grep '^a' input.txt input.txt の中から先頭が a の行だけを表示

解説

^ は正規表現で「行頭」を意味します。

grep '^文字列' を使うことで、指定した文字列から始まる行だけを効率よく抽出できます。

grepで行頭が特定の文字列で始まる行を検索

ファイル作成

cat << 'EOF' > input.txt apple red banana yellow apple green orange orange apple pie grape purple EOF

実行コマンド

grep '^apple' input.txt

実行結果

apple red
apple green
apple pie

仕組み

仕組み 内容
grep 指定したパターンに一致する行を検索するコマンド
^ 行頭(1文字目)を表す正規表現
^apple 行頭が apple で始まる行だけに一致する
input.txt 検索対象のファイル

解説

grep '^apple' input.txt は、^ を利用して「行頭が apple で始まる行」のみを抽出します。
行の途中に apple が含まれるだけの行は一致せず、先頭から始まる行だけが表示されます。

grepで行頭が複数の文字列に一致する行を検索

ファイル作成

cat << 'EOF' > input.txt apple red banana yellow cherry red apple green banana brown grape purple orange orange EOF

実行コマンド

grep -E '^(apple|banana)' input.txt

実行結果

apple red
banana yellow
apple green
banana brown

仕組み

項目 内容
grep テキストから条件に一致する行を検索するコマンド
-E 拡張正規表現を有効にし、|や()を使用できるようにする
^ 行頭を表すアンカー
(apple|banana) apple または banana のどちらかに一致する
^(apple|banana) 行頭が apple または banana で始まる行だけを検索する

解説

^で行頭を指定し、-Eと|を組み合わせることで複数の文字列をOR条件で検索できます。
行頭一致の条件を増やしたい場合は、(apple|banana|orange)のように追加するだけです。

grepで行頭が特定の1文字で始まる行を検索

ファイル作成

cat << 'EOF' > input.txt apple banana apricot cherry avocado blueberry EOF

実行コマンド

grep '^a' input.txt

実行結果

apple
apricot
avocado

仕組み

項目 内容
grep 条件に一致する行を検索するコマンド
^ 行頭(各行の先頭)を表す正規表現
a 行頭が a で始まる行を検索する文字
'^a' 「行頭が a の行」という検索パターン
input.txt 検索対象のファイル

解説

^ は正規表現で「行頭」を意味します。

grep '^a' input.txt を実行すると、各行の先頭が a の行だけを抽出できます。

grepで行頭が数字で始まる行を検索

ファイル作成

cat << 'EOF' > input.txt 123 apple abc orange 456 banana 789 grape xyz lemon 10 melon EOF

実行コマンド

grep '^[0-9]' input.txt

実行結果

123 apple
456 banana
789 grape
10 melon

仕組み

項目 内容
grep 指定したパターンに一致する行を検索するコマンド
^ 行頭を表すメタ文字
[0-9] 0〜9の数字を1文字表す文字クラス
^[0-9] 「行頭が数字で始まる」という条件を表す正規表現

解説

grep '^[0-9]' は、行頭 (^) が数字 ([0-9]) の行だけを抽出します。
ログやCSVなどから、数字で始まるデータ行だけを簡単に検索できます。

grepで行頭が空白から始まる行を検索

ファイル作成

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

実行コマンド

grep '^[[:space:]]' input.txt

実行結果

 banana
  grape
	peach

仕組み

項目 内容
grep テキストから条件に一致する行を検索するコマンド
^ 行頭を表すアンカー
[[:space:]] 半角スペースやタブなどの空白文字を表すPOSIX文字クラス
^[[:space:]] 行頭が空白文字で始まる行に一致する正規表現

解説

^で行頭を指定し、[[:space:]]で空白文字(スペース・タブなど)を表しています。
これにより、行頭が空白から始まる行だけを抽出できます。

grepで行頭のコメント行を検索

ファイル作成

cat << 'EOF' > input.txt # comment1 name=alice # comment2 age=20 # comment3 city=Tokyo ## comment4 email=alice@example.com EOF

実行コマンド

grep '^#' input.txt

実行結果

# comment1
# comment2
# comment3
## comment4

仕組み

項目 内容
grep テキストから条件に一致する行を検索するコマンド
^ 行頭を表すメタ文字
# コメント行の先頭文字として検索対象にする文字
'^#' 行頭が # の行だけに一致する正規表現
grep '^#' input.txt input.txt から行頭が # のコメント行だけを表示する

解説

^ を使用することで、# が行頭にある行だけを検索できます。
設定ファイルやシェルスクリプトからコメント行だけを抽出したい場合によく利用されます。

grepで行頭の空行を検索する方法

ファイル作成

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

実行コマンド

grep -n '^$' input.txt

実行結果

1:
4:
7:

仕組み

項目 内容
grep 指定したパターンに一致する行を検索するコマンド
^ 行頭を表すメタ文字
$ 行末を表すメタ文字
^$ 行頭から行末まで文字が存在しない行(空行)に一致
-n 一致した行番号も表示するオプション

解説

空行は「行頭の直後に行末がある状態」のため、^$ を指定すると空行だけを検索できます。
-n を付けると、空行がある行番号も確認できます。

grepで行頭と行末を組み合わせて検索

ファイル作成

cat << 'EOF' > input.txt error error.log access.log error.txt system error error.log.old debug.log error.log EOF

実行コマンド

grep '^error' input.txt

実行結果

error
error.log
error.txt
error.log.old
error.log

実行コマンド

grep 'log$' input.txt

実行結果

error.log
access.log
debug.log
error.log

実行コマンド

grep '^error.*log$' input.txt

実行結果

error.log
error.log

仕組み

項目 内容
^ 行頭を表し、指定した文字列で始まる行に一致する
$ 行末を表し、指定した文字列で終わる行に一致する
.* 任意の0文字以上の文字列に一致する
^error.*log$ errorで始まりlogで終わる行だけを検索する

解説

grepでは^と$を組み合わせることで、行頭・行末の両方を条件にした柔軟な検索ができます。
ログファイル名や特定の命名規則に一致する行を抽出する際によく利用されます。

grepで行頭に一致しない行を検索する方法

ファイル作成

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

実行コマンド

grep -v '^[[:space:]]' input.txt

実行結果

apple
banana
grape
#comment
123apple

仕組み

項目 内容
grep パターンに一致する行を検索するコマンド
^ 行頭を表すアンカー
[[:space:]] 半角スペースやタブなどの空白文字
^[[:space:]] 行頭が空白文字で始まる行に一致
-v 一致した行を除外し、一致しない行を表示

解説

grep -v '^[[:space:]]'は、行頭が空白で始まる行を除外し、それ以外の行を表示します。
行頭に空白がある行だけを除外したい場合に便利な指定方法です。

grepで行頭一致検索と-E(拡張正規表現)の使い分け

ファイル作成

cat << 'EOF' > input.txt apple banana apricot grape application pineapple EOF

実行コマンド

grep '^app' input.txt

実行結果

apple
application

実行コマンド

grep -E '^apple|grape$' input.txt

実行結果

apple
grape

仕組み

コマンド 仕組み 特徴
grep '^app' input.txt ^は行頭を表し、「app」で始まる行だけを検索する。 単純な行頭一致検索なら通常のgrepで十分。
grep -E '^apple|grape$' input.txt -Eは拡張正規表現を有効にし、|でOR条件を指定する。^appleは「appleで始まる行」、grape$は「grapeで終わる行」を検索する。 複数条件のOR検索などを簡潔に記述できる。

解説

行頭一致だけであれば^を使う通常のgrepで十分です。
複数条件のOR検索など拡張正規表現が必要な場合はgrep -Eを使用すると簡潔に記述できます。

grepで行頭一致検索を再帰的に実行する方法

ファイル作成

mkdir -p sample/dir1 sample/dir2

ファイル作成

cat << 'EOF' > sample/dir1/file1.txt error: failed warning: disk error: timeout info: ok EOF

ファイル作成

cat << 'EOF' > sample/dir2/file2.txt error: network info: connected warning: memory EOF

実行コマンド

grep -r '^error' sample

実行結果

sample/dir2/file2.txt:error: network
sample/dir1/file1.txt:error: failed
sample/dir1/file1.txt:error: timeout

仕組み

項目 内容
grep テキストを検索するコマンド
-r ディレクトリを再帰的に検索する
^ 正規表現で行頭を表す
^error 行頭が error の行だけに一致する
sample 検索対象ディレクトリ

解説

grep -r '^error' を使うことで、指定ディレクトリ配下のすべてのファイルから行頭が error の行だけを再帰的に検索できます。
^ は正規表現の行頭アンカーであり、前方一致検索に利用されます。

grepで行頭一致検索をfindコマンドと組み合わせる方法

ファイル作成

cat << 'EOF' > input.txt error: Disk full warning: Low memory success: Backup completed error: Permission denied info: Service started EOF

実行コマンド

find . -name "input.txt" -exec grep '^error' {} \;

実行結果

error: Disk full
error: Permission denied

仕組み

項目 内容
find . カレントディレクトリ以下を検索する
-name "input.txt" input.txtという名前のファイルを検索する
-exec ... {} \; 見つかったファイルごとにコマンドを実行する
grep '^error' ^で行頭を表し、errorで始まる行のみを抽出する
{} findで見つかったファイル名に置き換えられる

解説

grepの^を使うことで、指定した文字列で始まる行だけを検索できます。
findと組み合わせると、複数ファイルに対して行頭一致検索を一括実行できます。

grepで行頭検索がうまくいかない原因と対処法

ファイル作成

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

実行コマンド

grep "^apple" input.txt

実行結果

apple
apple pie

実行コマンド

grep "^Apple" input.txt

実行結果

Apple

実行コマンド

grep "^ banana" input.txt

実行結果

 banana

実行コマンド

grep "^apple" input.txt | cat -n

実行結果

     1	apple
     2	apple pie

仕組み

項目 内容
^ 行頭を表すアンカー。行の先頭から一致する文字列のみ検索する。
^apple 行頭がappleで始まる行だけを抽出する。
大文字・小文字 appleとAppleは別文字として扱われるため一致しない。
行頭の空白 行頭にスペースがある場合は、そのスペースも含めて検索条件を書く必要がある。
行頭検索がうまくいかない原因 行頭に空白やタブがある、検索文字列の大文字・小文字が異なる、^をクォートせずシェル展開の影響を受けるケースなど。

解説

grepの^は「行頭」を意味するアンカーであり、先頭から一致する文字列だけを検索します。期待どおりにヒットしない場合は、行頭の空白や大文字・小文字の違いを確認すると原因を特定しやすくなります。

grepで行頭検索を理解して使いこなすためのまとめ

grepで行頭検索を理解すると、必要なデータを効率よく抽出できるようになります。

まずは基本構文を身につけて実行していくことが理解への近道です。

コメントを残す

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

©︎ 2025-2026 running terminal commands