grepはテキスト検索で頻繁に利用されるコマンドですが、大文字と小文字の扱いを理解していないと期待した結果が得られないことがあります。
特に初学者は、検索結果が表示されない原因が文字の違いだったというケースでつまずきがちです。
本記事では、基本から応用までを詳しく解説します
参考:GNU grep
grepで大文字・小文字を区別する方法
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
BANANA
banana
EOF
実行コマンド
grep "Apple" input.txt
実行結果
Apple
実行コマンド
grep -i "Apple" input.txt
実行結果
Apple
apple
APPLE
仕組み
| 項目 | 内容 |
|---|---|
| grep | デフォルトでは大文字・小文字を区別して検索する。 |
| grep -i | -i(--ignore-case)を指定すると、大文字・小文字を区別せず検索する。 |
| 利用場面 | ユーザー入力やログ解析など、文字の大小を意識せず検索したい場合に便利。 |
解説
grepは標準では大文字・小文字を区別します。
-iオプションを付けるだけで区別せず検索できるため、柔軟な文字列検索が可能です。
grepで大文字・小文字を区別しないオプション(-i)の基本
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
Cherry
EOF
実行コマンド
grep -i "apple" input.txt
実行結果
Apple
apple
APPLE
実行コマンド
grep -i "banana" input.txt
実行結果
Banana
banana
仕組み
| 項目 | 内容 |
|---|---|
| grep | 指定したパターンを含む行を検索するコマンド |
| -i | 大文字・小文字を区別せずに検索するオプション |
| "apple" | 検索する文字列 |
| input.txt | 検索対象のファイル |
解説
grepは通常、大文字・小文字を区別して検索しますが、-iオプションを付けることで区別せずに検索できます。
Apple・apple・APPLEのような表記ゆれをまとめて検索したい場合に便利です。
grepで大文字・小文字を区別するオプション(--ignore-caseとの違い)
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
BANANA
EOF
実行コマンド
grep -i "apple" input.txt
実行結果
Apple
apple
APPLE
実行コマンド
grep --ignore-case "banana" input.txt
実行結果
Banana
banana
BANANA
仕組み
| 項目 | 内容 |
|---|---|
| -i | --ignore-caseの短縮オプション。大文字・小文字を区別せず検索する。 |
| --ignore-case | -iのロングオプション。機能は完全に同じで、可読性を重視する場合に使われる。 |
| 違い | 機能・動作に違いはなく、記述方法(短縮形かロングオプションか)だけが異なる。 |
解説
-iと--ignore-caseは同じ機能を持つため、好みや可読性に応じて使い分けます。
短く書くなら-i、スクリプトなどで意味を明確にしたい場合は--ignore-caseが便利です。
grepで大文字・小文字を区別しない単語検索を行う方法
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
Orange
EOF
実行コマンド
grep -i "apple" input.txt
実行結果
Apple
apple
APPLE
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキストから条件に一致する行を検索するコマンド |
| -i | 大文字・小文字を区別せずに検索するオプション(ignore case) |
| "apple" | 検索する単語 |
| input.txt | 検索対象のファイル |
解説
grep の -i オプションを使用すると、大文字・小文字の違いを無視して文字列を検索できます。
Apple、apple、APPLE のような表記ゆれがあるデータの検索に便利です。
grepで大文字・小文字を区別しない完全一致検索を行う方法
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
EOF
実行コマンド
grep -ix "apple" input.txt
実行結果
Apple
apple
APPLE
仕組み
| オプション | 役割 |
|---|---|
| grep | テキストを検索するコマンド |
| -i | 大文字・小文字を区別せずに検索する |
| -x | 行全体が検索文字列と完全一致するものだけを対象にする |
| "apple" | 検索する文字列 |
| input.txt | 検索対象のファイル |
解説
大文字・小文字を区別せず完全一致検索を行うには、-i と -x を組み合わせます。
これにより Apple や APPLE は一致しますが、apple123 や myapple のような部分一致は検索結果に含まれません。
grepで大文字・小文字を区別しない正規表現検索
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
Orange
EOF
実行コマンド
grep -Ei 'apple|banana' input.txt
実行結果
Apple
apple
APPLE
Banana
banana
実行コマンド
grep -i '^apple$' input.txt
実行結果
Apple
apple
APPLE
仕組み
| 項目 | 内容 |
|---|---|
| grep | ファイル内から条件に一致する行を検索するコマンド |
| -i | 大文字・小文字を区別せずに検索する |
| -E | 拡張正規表現を有効にし、|を使ったOR検索を利用できる |
| apple|banana | appleまたはbananaに一致する正規表現 |
| ^apple$ | 行全体がapple(大文字・小文字は-iで無視)の場合のみ一致 |
解説
grep -iを利用すると、大文字・小文字を区別せずに文字列を検索できます。
-Eを組み合わせることで、|を使ったOR検索などの拡張正規表現も簡潔に記述できます。
grepで大文字・小文字を区別しない複数パターン検索
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
Cherry
CHERRY
Grape
EOF
実行コマンド
grep -Ei 'apple|cherry' input.txt
実行結果
Apple
apple
APPLE
Cherry
CHERRY
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキストから条件に一致する行を検索するコマンド |
| -E | 拡張正規表現を有効にし、pattern1|pattern2のようなOR検索を使用できる |
| -i | 大文字・小文字を区別せずに検索する |
| apple|cherry | appleまたはcherryに一致する行を検索する |
| input.txt | 検索対象のファイル |
解説
-iを指定することで、Apple・APPLE・appleのような大文字・小文字の違いを無視して検索できます。
-Eと|を組み合わせることで、複数の検索パターンを簡潔に指定できます。
grepで大文字・小文字を区別しない再帰検索
ファイル作成
mkdir -p docs logs src
ファイル作成
cat << 'EOF' > docs/README.md
This is Sample Text
EOF
ファイル作成
cat << 'EOF' > docs/guide.txt
sample text
EOF
ファイル作成
cat << 'EOF' > logs/app.log
ERROR: Connection Failed
EOF
ファイル作成
cat << 'EOF' > logs/system.log
error: disk full
EOF
ファイル作成
cat << 'EOF' > src/main.py
Print("Hello World")
EOF
ファイル作成
cat << 'EOF' > src/test.py
print("hello world")
EOF
実行コマンド
grep -ri "error" .
実行結果
./logs/system.log:error: disk full
./logs/app.log:ERROR: Connection Failed
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキストを検索するコマンド |
| -r | 指定したディレクトリ配下を再帰的に検索する |
| -i | 大文字・小文字を区別せずに検索する |
| "error" | 検索する文字列。ERROR、Error、error を同一とみなして検索する |
| . | カレントディレクトリ以下を検索対象にする |
解説
grep -ri を使用すると、ディレクトリ配下のすべてのファイルを対象に、大文字・小文字を区別せず文字列を検索できます。
ログやソースコード全体から特定のキーワードを効率よく探す際によく利用されます。
grepで大文字・小文字を区別しない検索対象ファイルを限定する方法
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
Orange
EOF
実行コマンド
grep -i "apple" input.txt
実行結果
Apple
apple
APPLE
実行コマンド
grep -i "banana" input.txt
実行結果
Banana
banana
仕組み
| 項目 | 内容 |
|---|---|
| grep | ファイル内から指定した文字列を検索するコマンドです。 |
| -i | 大文字・小文字を区別せずに検索します(Ignore case)。 |
| "apple" | 検索する文字列を指定します。 |
| input.txt | 検索対象のファイルを指定します。オプションの後ろに指定することで検索対象を限定できます。 |
解説
grep -iを使用すると、大文字・小文字を区別せずに文字列を検索できます。検索対象のファイル名を最後に指定することで、特定のファイルだけを検索できます。
grepで大文字・小文字を区別しない検索結果を行番号付きで表示する
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
Cherry
EOF
実行コマンド
grep -in "apple" input.txt
実行結果
1:Apple
2:apple
3:APPLE
仕組み
| 項目 | 内容 |
|---|---|
| grep | 指定した文字列を含む行を検索するコマンド |
| -i | 大文字・小文字を区別せずに検索する(Ignore case) |
| -n | 一致した行の行番号を表示する |
| "apple" | 検索する文字列 |
| input.txt | 検索対象のファイル |
解説
-i オプションを付けることで、Apple・apple・APPLE のように大文字・小文字が異なっていても一致する行を検索できます。
-n を組み合わせることで、一致した行番号も同時に確認できます。
grepで大文字・小文字を区別しない検索結果の前後の行を表示する
ファイル作成
cat << 'EOF' > input.txt
Linux
linux
Ubuntu
LINUX
Debian
CentOS
LiNuX
Fedora
EOF
実行コマンド
grep -i -C 1 "grep" input.txt
実行結果
no output
実行コマンド
grep -i -C 1 "linux" input.txt
実行結果
Linux
linux
Ubuntu
LINUX
Debian
CentOS
LiNuX
Fedora
仕組み
| オプション | 説明 |
|---|---|
| grep | 指定した文字列を検索するコマンド |
| -i | 大文字・小文字を区別せずに検索する |
| -C 1 | 一致した行の前後1行もあわせて表示する |
| "linux" | 検索対象の文字列 |
| input.txt | 検索対象のファイル |
解説
-i を指定すると Linux、LINUX、LiNuX など大文字・小文字が異なる文字列も同一とみなして検索できます。
-C 1 を組み合わせることで、一致した行の前後1行も表示され、検索結果の文脈を確認できます。
grepで大文字・小文字を区別しない検索結果をパイプで活用する方法
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
banana
Cherry
EOF
実行コマンド
grep -i "apple" input.txt
実行結果
Apple
apple
APPLE
実行コマンド
grep -i "apple" input.txt | wc -l
実行結果
3
実行コマンド
grep -i "banana" input.txt | sort
実行結果
Banana
banana
仕組み
| 項目 | 内容 |
|---|---|
| grep | テキストを検索するコマンド |
| -i | 大文字・小文字を区別せずに検索するオプション |
| | | 前のコマンドの検索結果を次のコマンドへ渡す(パイプ) |
| wc -l | パイプで受け取った行数を数える |
| sort | パイプで受け取った検索結果を並び替える |
解説
grep -iを使用すると、大文字・小文字の違いを気にせず検索できます。
パイプ(|)を組み合わせることで、検索結果の件数集計や並び替えなどの処理へ簡単に活用できます。
grepで大文字・小文字を区別しない検索をfindコマンドと組み合わせる方法
ファイル作成
cat << 'EOF' > input.txt
Hello World
HELLO Linux
hello grep
Sample Text
HELLO FIND
Goodbye
EOF
実行コマンド
find . -name "input.txt" -exec grep -i "hello" {} \;
実行結果
Hello World
HELLO Linux
hello grep
HELLO FIND
仕組み
| 仕組み | 内容 |
|---|---|
| find . | カレントディレクトリから検索を開始する |
| -name "input.txt" | input.txtという名前のファイルを検索する |
| -exec | 見つかったファイルに対してコマンドを実行する |
| grep -i "hello" | helloを大文字・小文字を区別せずに検索する |
| {} | findで見つかったファイル名に置き換えられる |
| \; | -execの終了を表す |
解説
grepの-iオプションを使用すると、大文字・小文字を区別せずに文字列を検索できます。
findコマンドと組み合わせることで、複数のファイルから条件に一致する文字列を効率よく検索できます。
grepで大文字・小文字を区別しない検索ができない原因と対処法
ファイル作成
cat << 'EOF' > input.txt
Apple
apple
APPLE
Banana
BANANA
orange
Orange
EOF
実行コマンド
grep "apple" input.txt
実行結果
apple
実行コマンド
grep -i "apple" input.txt
実行結果
Apple
apple
APPLE
実行コマンド
grep --ignore-case "banana" input.txt
実行結果
Banana
BANANA
仕組み
| 項目 | 内容 |
|---|---|
| 原因 | grepはデフォルトで大文字・小文字を区別して検索するため。 |
| 対処法 | -iオプションを指定して検索する。 |
| 長いオプション | --ignore-caseでも同じ動作になる。 |
| 効果 | 大文字・小文字の違いを無視して一致する行を検索できる。 |
解説
grepで大文字・小文字を区別しない検索ができない原因は、-iオプションを付けていないことがほとんどです。
-iまたは--ignore-caseを指定することで、大文字・小文字を意識せず柔軟に検索できます。
grepで大文字・小文字を区別しない検索でよく使うオプション一覧
ファイル作成
cat << 'EOF' > input.txt
Hello World
hello world
HELLO WORLD
Linux
linux
LiNuX
Grep
grep
EOF
実行コマンド
grep -i "hello" input.txt
実行結果
Hello World
hello world
HELLO WORLD
実行コマンド
grep -i "linux" input.txt
実行結果
Linux
linux
LiNuX
実行コマンド
grep -in "grep" input.txt
実行結果
7:Grep
8:grep
実行コマンド
grep -iv "hello" input.txt
実行結果
Linux
linux
LiNuX
Grep
grep
仕組み
| オプション | 説明 | 動作 |
|---|---|---|
| -i | 大文字・小文字を区別しない | Hello・hello・HELLO を同一文字列として検索する |
| -in | 大文字・小文字を区別せず行番号も表示 | 一致した行の先頭に行番号を付与する |
| -iv | 大文字・小文字を区別せず一致しない行を表示 | 検索文字列を含まない行のみを出力する |
解説
grepで大文字・小文字を区別しない検索を行う場合は、-iオプションが最もよく使用されます。
-nや-vと組み合わせることで、検索結果の確認や除外検索も効率よく行えます。
grepの大文字・小文字検索のポイントまとめ
grepは標準では大文字と小文字を区別して検索します。
区別せず検索したい場合は-iまたは--ignore-caseを利用します。
基本的なオプションの役割を理解しておくことが、grepを効率よく使いこなす近道です。