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

grepの置換を徹底解説

updated: 2026/07/24 created: 2026/07/24

はじめに

grepは文字列検索でよく使われるコマンドですが、置換と組み合わせて活用する場面も多くあります。

一方で、grep単体では置換ができないため、sedやfind、xargsなどのコマンドと組み合わせて利用することが重要です。

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

参考: GNU grep

grep置換の基本構文

ファイル作成

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

実行コマンド

grep "apple" input.txt

実行結果

apple
apple pie
pineapple

実行コマンド

grep "apple" input.txt | sed 's/apple/orange/g'

実行結果

orange
orange pie
pineorange

仕組み

項目 内容
コマンド grep
役割 パターンに一致する行を検索して表示する
置換可否 ×(grep単体では置換できない)
置換方法 sedやperlなどの置換コマンドと組み合わせて使用する

解説

grepは検索専用のコマンドであり、文字列の置換機能はありません。
そのため、「grep 置換」と言われるケースでは、一般的にgrepで検索した結果をsedへ渡して置換する方法を指します。

grep置換で特定の文字列を一括置換する方法

ファイル作成

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

実行コマンド

grep -rl "apple" . | xargs sed -i 's/apple/orange/g'

実行結果

no output

実行コマンド

cat input.txt

実行結果

orange
banana
orange pie
orange
orange juice

仕組み

要素 説明
grep -rl "apple" . apple を含むファイル名を再帰的に検索する
xargs 検索結果のファイル名を sed に渡す
sed -i ファイルを直接編集する(インプレース編集)
s/apple/orange/g apple を orange にすべて置換する

解説

grep 自体には置換機能はありませんが、sed と組み合わせることで検索したファイルだけを効率よく一括置換できます。grep 置換ではこの組み合わせがよく利用されます。

grep置換で正規表現を使う方法

ファイル作成

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

実行コマンド

grep -E 'apple|grape' input.txt

実行結果

apple
grape
pineapple

実行コマンド

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

実行結果

apple
grape

仕組み

項目 内容
grep ファイル内から条件に一致する行を検索するコマンド
-E 拡張正規表現(ERE)を有効にするオプション
apple|grape apple または grape に一致する(OR条件)
^ 行頭を表すアンカー
$ 行末を表すアンカー
^apple$ 行全体が apple の場合のみ一致する

解説

grepには置換機能はありませんが、正規表現を利用して柔軟な文字列検索ができます。
置換を行う場合は、一般的にsedやperlなどのコマンドと組み合わせて使用します。

grep置換でキャプチャグループを使った置換

ファイル作成

cat << 'EOF' > input.txt name: taro name: hanako name: jiro EOF

実行コマンド

grep '^name:' input.txt | sed -E 's/^name: (.*)$/user=\1/'

実行結果

user=taro
user=hanako
user=jiro

仕組み

項目 内容
grep '^name:' name:で始まる行のみ抽出する
sed -E 拡張正規表現を有効にする
(.*) name:以降の文字列をキャプチャグループとして取得する
\1 1番目のキャプチャグループを置換後の文字列へ展開する
s/検索/置換/ 正規表現に一致した文字列を置換する

解説

grepで対象行を抽出し、sedのキャプチャグループ( )と\1を利用して値を再利用しながら置換しています。
grep単体では置換できないため、sedなどの置換コマンドと組み合わせるのが一般的です。

grep置換で一致した行のみを置換する方法

ファイル作成

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

実行コマンド

grep 'apple' input.txt | sed 's/apple/APPLE/'

実行結果

APPLE
APPLE pie
APPLE juice

実行コマンド

sed '/apple/s/apple/APPLE/' input.txt

実行結果

APPLE
banana
APPLE pie
orange
APPLE juice

仕組み

コマンド 仕組み 特徴
grep 'apple' input.txt | sed 's/apple/APPLE/' grepで一致した行だけを抽出し、その出力をsedで置換する 一致した行のみが出力される
sed '/apple/s/apple/APPLE/' input.txt appleを含む行だけsedの置換を実行する 元の全行を保持したまま一致行のみ置換できる

解説

grepで抽出した結果だけを置換したい場合はパイプでsedへ渡します。
元のファイル構成を維持しながら一致した行だけを置換したい場合は、sedのアドレス指定(/パターン/)を利用する方法が便利です。

grep置換で複数ファイルを一括置換する方法

ファイル作成

mkdir -p sample

ファイル作成

cat << 'EOF' > sample/file1.txt grep is useful Search with grep EOF

ファイル作成

cat << 'EOF' > sample/file2.txt Learn grep grep is a search command EOF

実行コマンド

grep -rl "grep" sample | xargs sed -i 's/grep/rg/g'

実行結果

no output

実行コマンド

grep -R "rg" sample

実行結果

sample/file2.txt:Learn rg
sample/file2.txt:rg is a search command
sample/file1.txt:rg is useful
sample/file1.txt:Search with rg

仕組み

項目 内容
grep -rl "grep" sample 「grep」を含むファイル名だけを再帰的に取得する
xargs 取得したファイル名を後続のコマンドへ引き渡す
sed -i ファイルを直接編集して文字列を置換する
s/grep/rg/g 各行のすべての「grep」を「rg」に置換する

解説

grepで対象ファイルを抽出し、sedで置換することで複数ファイルを一括更新できます。
対象ファイルを限定できるため、安全かつ効率的に文字列を置換できます。

grep置換で特定の拡張子のみを対象にする方法

ファイル作成

mkdir -p src docs

ファイル作成

cat << 'EOF' > src/main.py grep foo EOF

ファイル作成

cat << 'EOF' > src/app.py grep bar EOF

ファイル作成

cat << 'EOF' > src/index.js grep baz EOF

ファイル作成

cat << 'EOF' > src/util.py grep hoge EOF

ファイル作成

cat << 'EOF' > docs/readme.md grep fuga EOF

実行コマンド

grep -r 'grep' src/*.py docs/*.py | sed 's/grep/replace/g'

実行結果

grep: docs/*.py: No such file or directory
src/app.py:replace bar
src/main.py:replace foo
src/util.py:replace hoge

仕組み

項目 内容
mkdir -p src docs src と docs ディレクトリを作成する(存在していてもエラーにならない)
src/*.py docs/*.py シェルのグロブで .py ファイルだけを検索対象にする
grep -r 'grep' 指定した .py ファイルから grep を含む行を検索する
sed 's/grep/replace/g' 抽出した行の grep を replace に置換する
対象制限 src/index.js や docs/readme.md は *.py に一致しないため検索・置換の対象にならない

解説

*.py のグロブ指定によって、検索対象を Python ファイルだけに限定できます。
そのため、他の拡張子のファイルを意識することなく、安全に置換処理を行えます。

grep置換で除外条件を指定する方法

ファイル作成

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

実行コマンド

grep -v "apple" input.txt | sed 's/banana/BANANA/g'

実行結果

BANANA
orange
grape
BANANA split
orange juice
grape soda

仕組み

項目 内容
grep -v "apple" apple を含む行を除外する(除外条件を指定)
sed 's/banana/BANANA/g' 残った行だけで banana を BANANA に置換する
パイプ | grep の出力を sed に渡して連続処理する

解説

grep 自体には文字列を置換する機能はないため、除外条件の指定は grep -v、置換は sed を組み合わせて実現します。

これにより、特定の行を除外した上で安全に文字列を置換できます。

grep置換で複数条件(AND・OR)を指定する方法

ファイル作成

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

実行コマンド

grep -E 'apple|banana' input.txt | sed 's/apple/APPLE/g; s/banana/BANANA/g'

実行結果

APPLE red
APPLE green
BANANA yellow
BANANA green
APPLE yellow

実行コマンド

grep 'apple' input.txt | grep 'green' | sed 's/apple/APPLE/g; s/green/GREEN/g'

実行結果

APPLE GREEN

実行コマンド

grep 'apple' input.txt | grep 'yellow' | sed 's/apple/APPLE/g; s/yellow/YELLOW/g'

実行結果

APPLE YELLOW

実行コマンド

grep -E 'apple|banana' input.txt | grep 'green' | sed 's/apple/APPLE/g; s/banana/BANANA/g; s/green/GREEN/g'

実行結果

APPLE GREEN
BANANA GREEN

実行コマンド

sed -i -e 's/apple/APPLE/g' -e 's/banana/BANANA/g' input.txt

実行結果

no output

実行コマンド

cat input.txt

実行結果

APPLE red
APPLE green
BANANA yellow
BANANA green
orange orange
grape green
APPLE yellow

仕組み

条件 コマンド例 仕組み
OR検索 + 置換 grep -E 'apple|banana' input.txt | sed 's/apple/APPLE/g; s/banana/BANANA/g' grepの-Eオプションで正規表現によるOR検索を行い、一致した行をsedで置換する。
AND検索 + 置換 grep 'apple' input.txt | grep 'green' | sed 's/apple/APPLE/g' 複数のgrepをパイプで接続し、すべての条件に一致した行だけをsedで変更する。
OR + AND検索 + 置換 grep -E 'apple|banana' input.txt | grep 'green' | sed 's/apple/APPLE/g; s/banana/BANANA/g; s/green/GREEN/g' OR条件で対象を絞り込み、その結果をAND条件でさらに検索してsedで置換する。
ファイル直接置換 sed -i -e 's/old/new/g' file -iオプションにより標準出力ではなく、元ファイルへ変更内容を書き込む。

解説

grepは検索専用コマンドのため置換機能はありません。

検索条件をgrepで作成し、置換処理はsedへ渡すことで「grep置換」を実現できます。

grep置換でfindコマンドを組み合わせる方法

ファイル作成

mkdir -p src docs

ファイル作成

cat << 'EOF' > src/main.txt This is a grep replacement sample. EOF

ファイル作成

cat << 'EOF' > src/test.txt Run grep replacement. EOF

ファイル作成

cat << 'EOF' > docs/readme.md Explanation of grep replacement. EOF

実行コマンド

find . \( -path "./src/*" -o -path "./docs/*" \) -type f -exec grep -H "replacement" {} \;

実行結果

./docs/readme.md:Explanation of grep replacement.
./src/main.txt:This is a grep replacement sample.
./src/test.txt:Run grep replacement.

実行コマンド

find . \( -path "./src/*" -o -path "./docs/*" \) -type f -exec sed -i 's/replacement/search and replace/g' {} \;

実行結果

no output

実行コマンド

find . \( -path "./src/*" -o -path "./docs/*" \) -type f -exec grep -H "search and replace" {} \;

実行結果

./docs/readme.md:Explanation of grep search and replace.
./src/main.txt:This is a grep search and replace sample.
./src/test.txt:Run grep search and replace.

仕組み

要素 内容
find . カレントディレクトリ以下を検索する
-path "./src/*" -o -path "./docs/*" srcまたはdocs配下のファイルを対象にする
-type f ファイルのみを検索対象にする
-exec grep "replacement" {} \; 見つかった各ファイルで文字列を検索する
-exec sed -i 's/replacement/search and replace/g' {} \; 見つかった各ファイルの文字列を一括置換する
{} findで見つかったファイル名が入る
\; -execの終了を表す

解説

findで対象ファイルを絞り込み、grepで検索、sedで置換することで複数ファイルを効率よく処理できます。

-execを利用すると、検索したファイルごとに任意のコマンドを実行できます。

grep置換でxargsを使って一括置換する方法

ファイル作成

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

実行コマンド

grep -rl "apple" . --include="*.txt" | xargs sed -i 's/apple/banana/g'

実行結果

no output

実行コマンド

cat input.txt

実行結果

banana
orange
banana
grape
banana

仕組み

要素 役割
grep -rl "apple" . appleを含むファイル名のみを再帰的に検索する
--include="*.txt" 対象を.txtファイルだけに限定する
xargs grepで取得したファイル一覧を後続コマンドへ渡す
sed -i 's/apple/banana/g' 各ファイル内のappleをbananaへ一括置換する
cat input.txt 置換後の内容を確認する

解説

grepで置換対象のファイルだけを抽出し、その一覧をxargs経由でsedへ渡すことで効率的に一括置換できます。

大量のファイルがある環境でも不要なファイルを処理せずに済むため、高速に実行できます。

grep置換で置換結果を確認する方法(ドライラン)

ファイル作成

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

実行コマンド

grep 'apple' input.txt

実行結果

apple
apple pie
pineapple

実行コマンド

grep 'apple' input.txt | sed 's/apple/orange/g'

実行結果

orange
orange pie
pineorange

実行コマンド

sed 's/apple/orange/g' input.txt

実行結果

orange
banana
orange pie
grape
pineorange

実行コマンド

cat input.txt

実行結果

apple
banana
apple pie
grape
pineapple

仕組み

コマンド 役割 ファイル変更
grep 'apple' input.txt 置換対象となる行だけを抽出する なし
grep 'apple' input.txt | sed 's/apple/orange/g' 抽出した行に対して置換結果だけを確認する なし
sed 's/apple/orange/g' input.txt ファイル全体の置換結果を標準出力へ表示する なし
cat input.txt 元ファイルが変更されていないことを確認する なし

解説

grepは置換対象の行を事前に確認できるため、実際に置換する前のドライランとして活用できます。
sedを組み合わせれば、ファイルを変更せずに「grep 置換」の結果だけを安全に確認できます。

grep置換ができない場合の原因と対処法

ファイル作成

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

実行コマンド

grep "apple" input.txt | sed 's/apple/orange/'

実行結果

orange

実行コマンド

grep "orange" input.txt | sed 's/orange/apple/'

実行結果

no output

実行コマンド

sed -i 's/apple/orange/' input.txt

実行結果

no output

実行コマンド

cat input.txt

実行結果

orange
banana
grape

仕組み

項目 内容
原因 grepは検索専用コマンドであり、ファイルを書き換える機能(置換機能)はない。
なぜ置換できないか grepは一致した行を標準出力へ表示するだけで、入力ファイルは変更しない。
対処法 sed 's/検索文字列/置換文字列/'で標準出力を置換する。
ファイルを直接置換する方法 sed -i 's/検索文字列/置換文字列/' ファイル名を使用する。
grepの役割 対象文字列を検索・抽出する。
sedの役割 文字列の置換・編集を行う。

解説

grepは検索専用コマンドのため、単独では文字列を置換できません。
文字列を変更したい場合は、sedやperlなどのテキスト編集コマンドと組み合わせて使用します。

grep置換をシェルスクリプトで自動化する方法

ファイル作成

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

ファイル作成

cat << 'EOF' > replace.sh #!/bin/bash # Search with grep and replace with sed TARGET="apple" REPLACE="grape" grep -n "$TARGET" input.txt sed -i "s/$TARGET/$REPLACE/g" input.txt echo "After replacement:" cat input.txt EOF

実行コマンド

chmod +x replace.sh

実行結果

no output

実行コマンド

./replace.sh

実行結果

1:apple
3:apple
After replacement:
grape
banana
grape
orange

仕組み

処理 使用コマンド 内容
対象文字検索 grep ファイル内から置換対象の文字列を確認
置換処理 sed 指定文字列を別の文字列へ変更
自動化 シェルスクリプト grep検索とsed置換を一連の処理として実行
実行権限付与 chmod スクリプトを直接実行可能にする

解説

grepで対象文字列を確認し、sedによる置換処理をシェルスクリプト化することで、大量ファイルへの文字列置換作業を自動化できます。
この方法を利用すると、同じ置換処理を繰り返し実行でき、作業時間の短縮や入力ミスの防止につながります。

grepの置換のポイントまとめ

grep置換は検索と置換を組み合わせた効率的な作業方法です。

基本構文を理解したうえで、正規表現や複数条件、findやxargsとの連携を覚えると、大量のファイルでも素早く編集できます。

基礎から順番に学ぶことで、初心者でも実践的なコマンド操作を身につけられます。

コメントを残す

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

©︎ 2025-2026 running terminal commands