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

grepとxargsを徹底解説

updated: 2026/07/29 created: 2026/07/29

はじめに

grepとxargsは、LinuxやUnix環境でファイル検索や一括処理を効率化する代表的なコマンドです。

単独でも便利ですが、組み合わせることで検索結果をそのまま別のコマンドへ渡し、複数ファイルの編集や削除、ログ調査などを短いコマンドで実現できます。

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

参考: GNU grep

grepとxargsの基本構文

ファイル作成

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

実行コマンド

grep "banana" input.txt | xargs -I {} echo "Found: {}"

実行結果

Found: banana
Found: banana

実行コマンド

grep -v "apple" input.txt | xargs

実行結果

banana orange grape banana

仕組み

コマンド 役割 説明
grep "apple" input.txt 検索 input.txtからappleを含む行を抽出する
grep "banana" input.txt | xargs -I {} echo "Found: {}" 検索+引数展開 grepの出力をxargsが1行ずつ受け取り、echoの引数として実行する
grep -v "apple" input.txt | xargs 除外検索+引数結合 apple以外の行を抽出し、xargsが空白区切りの引数として1行にまとめて出力する

解説

grepはテキストから条件に一致する行を検索するコマンドです。
xargsを組み合わせることで、検索結果を別のコマンドの引数として受け渡し、効率よく一括処理できます。

grepとxargsで標準入力を受け渡す仕組み

ファイル作成

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

実行コマンド

grep "apple" input.txt | xargs -I {} echo "found: {}"

実行結果

found: apple
found: apple juice

実行コマンド

grep "apple" input.txt | xargs

実行結果

apple apple juice

仕組み

コマンド 役割 標準入力 標準出力
grep "apple" input.txt appleを含む行を検索 input.txt apple、apple juice
| 前のコマンドの標準出力を次へ渡す grepの出力 xargsへ受け渡し
xargs -I {} echo "found: {}" 標準入力を1行ずつ{}へ展開してコマンド実行 grepの出力 加工した文字列を表示
xargs 標準入力を空白区切りの引数へ変換 grepの出力 apple apple juice

解説

grepは検索結果を標準出力へ出力し、パイプ(|)によってその内容をxargsへ標準入力として渡します。
xargsは受け取ったデータをコマンドライン引数へ変換し、後続のコマンドへ受け渡すことで複数行のデータを効率よく処理できます。

grepとxargsで一致したファイルを一括処理する

ファイル作成

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

実行コマンド

grep -l "apple" *.txt | xargs -I {} wc -l {}

実行結果

5 input.txt

実行コマンド

grep -l "apple" *.txt | xargs -I {} cp {} {}.bak

実行結果

no output

実行コマンド

ls *.bak

実行結果

input.txt.bak

仕組み

コマンド 役割
grep -l "apple" *.txt appleを含むファイル名だけを出力する
xargs -I {} 標準入力で受け取ったファイル名を{}へ渡してコマンドを実行する
wc -l {} 対象ファイルの行数を表示する
cp {} {}.bak 一致したファイルをまとめてバックアップする

解説

grepで対象ファイルを抽出し、その結果をxargsへ渡すことで、一致したファイルに対して同じ処理を一括実行できます。
ファイル数が多い場合でも効率的に処理できる組み合わせです。

grepとxargsで複数条件を指定して検索する方法

ファイル作成

cat << 'EOF' > input.txt ERROR Database connection failed INFO Application started WARN Disk usage is high ERROR Authentication failed INFO Backup completed WARN Memory usage is high ERROR Timeout occurred DEBUG Cache initialized EOF

実行コマンド

grep -E 'ERROR|WARN' input.txt | xargs -I {} echo "found:{}"

実行結果

found:ERROR Database connection failed
found:WARN Disk usage is high
found:ERROR Authentication failed
found:WARN Memory usage is high
found:ERROR Timeout occurred

仕組み

要素 説明
grep -E 'ERROR|WARN' -Eで拡張正規表現を使用し、ERRORまたはWARNに一致する行を検索する。
xargs 標準入力から受け取った各行を引数として後続コマンドへ渡す。
-I {} {}を入力行に置き換えてコマンドを実行する。
echo "found:{}" 検索結果の先頭にfound:を付けて表示する。

解説

grepで複数条件に一致した結果をxargsへ渡すことで、各行を任意の形式へ加工して出力できます。
echo以外のコマンドと組み合わせることで、検索結果に対するさまざまな処理を自動化できます。

grepとxargsで除外条件を指定する方法

ファイル作成

cat << 'EOF' > input.txt error: disk full info: process started warning: memory usage high error: permission denied info: backup completed warning: cpu temperature high EOF

実行コマンド

grep -v '^info:' input.txt

実行結果

error: disk full
warning: memory usage high
error: permission denied
warning: cpu temperature high

実行コマンド

grep -v '^info:' input.txt | tr '\n' '\0' | xargs -0 -I {} echo "target: {}"

実行結果

target: error: disk full
target: warning: memory usage high
target: error: permission denied
target: warning: cpu temperature high

仕組み

項目 内容
grep -v '^info:' info:で始まる行を除外して出力する。
| grepの出力を次のコマンドへ渡す。
-I {} 入力された文字列を{}へ置き換えてコマンドを実行する。
echo "target: {}" 除外後の各行を引数として表示する。

解説

grepで不要な行を除外し、その結果だけをxargsへ渡すことで、必要なデータに対してのみコマンドを実行できます。
ログ解析やファイル処理を効率化する際によく利用される組み合わせです。

grepとxargsで安全にファイル名を扱う方法

ファイル作成

cat << 'EOF' > input.txt apple banana target file.txt target.log orange my target data.txt EOF

実行コマンド

grep 'target' input.txt

実行結果

target file.txt
target.log
my target data.txt

実行コマンド

grep 'target' input.txt | xargs -I{} printf '[%s]\n' "{}"

実行結果

[target file.txt]
[target.log]
[my target data.txt]

仕組み

項目 内容
grep 'target' target を含む行だけを抽出する
xargs grep の出力を受け取り、1行ずつコマンドの引数として渡す
-I{} 取得した1行を {} に展開してコマンドへ渡す
printf '[%s]\n' "{}" 受け取った文字列を [] で囲んで表示し、渡された引数を確認する

解説

grep の結果を xargs に渡すことで、抽出した各行を別のコマンドの引数として順番に処理できます。
-I{} を指定すると、1行全体が {} に展開されるため、指定したコマンドへ分かりやすく受け渡せます。

grepとxargsでNULL区切りを扱う方法

ファイル作成

printf 'apple\0banana split\0orange\0apple pie\0grape\0' > input.txt

実行コマンド

grep -z "apple" input.txt | xargs -0 -I{} echo "MATCH: {}"

実行結果

MATCH: apple
MATCH: apple pie

実行コマンド

grep -z "banana" input.txt | xargs -0 -I{} printf '[%s]\n' "{}"

実行結果

[banana split]

実行コマンド

grep -zE "apple|banana" input.txt | xargs -0

実行結果

apple apple pie banana split

仕組み

コマンド 説明
printf '...\0' > input.txt NULL文字(\0)区切りのデータを作成する。
grep -z 入力をNULL区切りのレコードとして扱い、一致したレコードをNULL区切りで出力する。
grep -zE 拡張正規表現を使用して複数パターンを検索する。
xargs -0 NULL区切りの入力を安全に受け取り、引数としてコマンドへ渡す。
xargs -0 -I{} 入力ごとに{}へ展開してコマンドを実行する。

解説

grep -zとxargs -0を組み合わせることで、NULL区切りのデータを安全に処理できます。空白を含むデータ(banana splitやapple pie)も1つのレコードとして扱えるため、find -print0などと組み合わせる際によく利用されます。

grepとxargsで並列実行する方法

ファイル作成

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

実行コマンド

grep "apple" input.txt | tr '\n' '\0' | xargs -0 -P2 -I{} sh -c 'echo "Processing: {}"; sleep 1'

実行結果

Processing: apple
Processing: apple juice
Processing: apple pie

仕組み

項目 内容
grep appleを含む行を抽出する
tr '\n' '\0' 改行区切りをNULL文字区切りへ変換し、安全にxargsへ渡す
xargs -0 NULL文字区切りの入力を受け取る
-P2 最大2プロセスを並列実行する
-I{} 受け取った1件のデータを{}へ展開する
sh -c 展開したデータを使用して任意のシェルコマンドを実行する

解説

trで改行をNULL文字へ変換し、xargs -0で受け取ることで、空白を含む行も安全に処理できます。

-P2を指定すると、最大2つのプロセスが同時に実行され、処理時間を短縮できます。

grepとxargsで一括置換を行う方法

ファイル作成

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

実行コマンド

grep -l "apple" input.txt | xargs sed 's/apple/APPLE/g'

実行結果

APPLE
orange
APPLE juice
banana
APPLE pie

仕組み

コマンド 役割
grep -l "apple" input.txt appleを含むファイル名を出力する
xargs 標準入力で受け取ったファイル名を引数として後続コマンドへ渡す
sed 's/apple/APPLE/g' 対象ファイルのappleをすべてAPPLEへ一括置換する

解説

grepで条件に一致するファイルだけを抽出し、その結果をxargsでsedへ渡すことで複数ファイルを効率よく一括置換できます。
対象ファイルが多い場合でも、手作業なしでまとめて処理できる方法です。

grepとxargsでログファイルを効率よく調査する

ファイル作成

cat << 'EOF' > input.txt 2026-07-29 10:00:01 INFO User login successful 2026-07-29 10:01:15 ERROR Database connection failed 2026-07-29 10:02:30 INFO File upload completed 2026-07-29 10:03:45 ERROR Network timeout occurred 2026-07-29 10:04:20 WARN Disk usage high 2026-07-29 10:05:10 ERROR Database query failed EOF

実行コマンド

find . -name "*.log" | xargs grep "Database"

実行結果

./app.log:2026-07-29 10:01:15 ERROR Database connection failed
./app.log:2026-07-29 10:05:10 ERROR Database query failed

実行コマンド

find . -name "*.log" | xargs grep -n "ERROR"

実行結果

./app.log:2:2026-07-29 10:01:15 ERROR Database connection failed
./app.log:4:2026-07-29 10:03:45 ERROR Network timeout occurred
./app.log:6:2026-07-29 10:05:10 ERROR Database query failed

仕組み

コマンド 役割 動作
grep キーワード検索 ログ内から指定文字列を抽出する
find ファイル検索 調査対象のログファイルを取得する
xargs 引数変換 標準入力をgrepなどのコマンド引数へ渡す
find + xargs + grep 大量ログ調査 複数ログを効率的に横断検索する

解説

grepはログ内容の検索、xargsは検索対象ファイルを効率的にコマンドへ渡す役割を持ちます。

大量のログファイルを調査する場合、find | xargs grep の組み合わせが有効です。

grepとxargsで不要ファイルを安全に削除する方法

ファイル作成

mkdir -p work

ファイル作成

touch work/file1.log

ファイル作成

touch work/file2.log

ファイル作成

touch work/file3.txt

ファイル作成

touch work/debug.log

ファイル作成

touch work/readme.md

実行コマンド

ls work

実行結果

debug.log	file1.log	file2.log	file3.txt	readme.md

実行コマンド

ls work | grep '.log$' | xargs -r -I {} rm "work/{}"

実行結果

no output

実行コマンド

ls work

実行結果

file3.txt	readme.md

仕組み

コマンド 役割
ls work ディレクトリ内のファイル一覧を表示する
grep '\.log$' .logで終わるファイルだけを抽出する
xargs -r -I {} rm "work/{}" 抽出したファイル名をrmへ安全に渡して削除する
-r 入力が空の場合はrmを実行しない
-I {} {}に受け取ったファイル名を展開する

解説

grepで削除対象を絞り込み、その結果だけをxargs経由でrmへ渡すことで、不要なファイルのみを安全に削除できます。

-rを付けることで一致するファイルがない場合の不要な実行も防げます。

grepとxargsの活用ポイントまとめ

grepとxargsを組み合わせることで、検索から一括処理までを効率よく自動化できます。

基礎から順番に学び、実際の作業で活用しながら理解を深めていくことが重要です。

コメントを残す

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

©︎ 2025-2026 running terminal commands