テキスト処理 (awk / sed / grep) チート集
grep、sed、awk の基本から正規表現、置換、フィールド処理、集計、ログ解析、CSV 抽出、Apache log の Top IP 集計まで、シェル作業で頻出する実例を集めたチート集。
- 更新日
- 2026-05-29
- 参照範囲
- 公式ドキュメント / man page / 主要ベンダーCLI
- 対象実装
- 主要 Linux / BSD / ネットワーク機器 CLI の一般的な実装
- 免責
- OS とバージョン差分は実環境で確認してください。
このチートシートの使いどころ
テキスト処理 (awk / sed / grep) チート集は、grep、sed、awk の基本から正規表現、置換、フィールド処理、集計、ログ解析、CSV 抽出、Apache log の Top IP 集計まで、シェル作業で頻出する実例を集めたチート集。 対象は公式ドキュメント、man page、主要ベンダー CLI で確認できる現行の一般的な実装です。カテゴリはgrep、sed、awk、組み合わせ実例を中心に、38件のコマンドや値を用途別に引けます。障害調査、設定変更前の確認、作業メモ作成で、grep、sed、awk、text processing、regexに関連する操作を短時間で探すために使います。
38 / 38
grep PATTERN fileawk / sed / grep で grep PATTERN file を実務運用で使う
$ grep "ERROR" /var/log/app.loggrep -Eawk / sed / grep で grep -E を実務運用で使う
$ grep -E "error|warn" app.loggrep -vawk / sed / grep で grep -v を実務運用で使う
$ grep -v "healthcheck" access.loggrep -nawk / sed / grep で grep -n を実務運用で使う
$ grep -n "timeout" app.loggrep -iawk / sed / grep で grep -i を実務運用で使う
$ grep -i "fatal" app.loggrep -A -B -Cawk / sed / grep で grep -A -B -C を実務運用で使う
$ grep -C 3 "panic" app.loggrep -rawk / sed / grep で grep -r を実務運用で使う
$ grep -rn "listen" /etc/nginxgrep --includeawk / sed / grep で grep --include を実務運用で使う
$ grep -r --include="*.conf" "server_name" /etc/nginxgrep -oawk / sed / grep で grep -o を実務運用で使う
$ grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.loggrep -cawk / sed / grep で grep -c を実務運用で使う
$ grep -c " 500 " access.logsed s/x/y/gawk / sed / grep で sed s/x/y/g を実務運用で使う
$ sed "s/old/new/g" file.txtsed -iawk / sed / grep で sed -i を実務運用で使う
$ sed -i.bak "s/DEBUG/INFO/g" app.confsed -n pawk / sed / grep で sed -n p を実務運用で使う
$ sed -n "10,20p" app.logsed address deleteawk / sed / grep で sed address delete を実務運用で使う
$ sed "/healthcheck/d" access.logsed line rangeawk / sed / grep で sed line range を実務運用で使う
$ sed "1,5s/foo/bar/g" file.txtsed appendawk / sed / grep で sed append を実務運用で使う
$ sed "/server {/a\ add_header X-Test yes;" nginx.confsed multiline Nawk / sed / grep で sed multiline N を実務運用で使う
$ sed -n "N;/foo\nbar/p" file.txtsed print matchingawk / sed / grep で sed print matching を実務運用で使う
$ sed -n "/ERROR/p" app.logsed extract groupawk / sed / grep で sed extract group を実務運用で使う
$ sed -n "s/^user=\([^ ]*\).*/\1/p" app.logsed newline literalawk / sed / grep で sed newline literal を実務運用で使う
$ sed "s/,/\n/g" values.csvawk print fieldawk / sed / grep で awk print field を実務運用で使う
$ awk "{print $1, $NF}" access.logawk BEGIN FSawk / sed / grep で awk BEGIN FS を実務運用で使う
$ awk "BEGIN{FS=":"}{print $1}" /etc/passwdawk -Fawk / sed / grep で awk -F を実務運用で使う
$ awk -F, "{print $1,$3}" users.csvawk printfawk / sed / grep で awk printf を実務運用で使う
$ awk "{printf "%-20s %s\n", $1, $2}" file.txtawk sumawk / sed / grep で awk sum を実務運用で使う
$ awk "{sum += $5} END{print sum}" access.logawk associative arrayawk / sed / grep で awk associative array を実務運用で使う
$ awk "{count[$1]++} END{for (ip in count) print count[ip], ip}" access.logawk lengthawk / sed / grep で awk length を実務運用で使う
$ awk "length($0) > 120" app.logawk select numericawk / sed / grep で awk select numeric を実務運用で使う
$ awk "$9 >= 500 {print}" access.logawk substrawk / sed / grep で awk substr を実務運用で使う
$ awk "{print substr($0,1,80)}" app.logawk ENVIRONawk / sed / grep で awk ENVIRON を実務運用で使う
$ awk "BEGIN{print ENVIRON["HOME"]}"grep awk top IPawk / sed / grep で grep awk top IP を実務運用で使う
$ grep " 500 " access.log | awk "{print $1}" | sort | uniq -c | sort -nr | headCSV column extractawk / sed / grep で CSV column extract を実務運用で使う
$ awk -F, "NR>1 {print $2}" users.csvApache top 10 IPawk / sed / grep で Apache top 10 IP を実務運用で使う
$ awk "{print $1}" access.log | sort | uniq -c | sort -nr | head -10Specific IP countawk / sed / grep で Specific IP count を実務運用で使う
$ grep "192.0.2.10" access.log | wc -lReplace config safelyawk / sed / grep で Replace config safely を実務運用で使う
$ sed -i.bak "s/^worker_processes.*/worker_processes auto;/" /etc/nginx/nginx.confExtract status codeawk / sed / grep で Extract status code を実務運用で使う
$ awk "{print $9}" access.log | sort | uniq -c | sort -nrFilter time rangeawk / sed / grep で Filter time range を実務運用で使う
$ awk "$4 >= "[14/May/2026:10" && $4 < "[14/May/2026:11"" access.logFind unique errorsawk / sed / grep で Find unique errors を実務運用で使う
$ grep -E "ERROR|FATAL" app.log | sed "s/[0-9-]{10}.*/.../" | sort -u| Command | Description | Example | Copy |
|---|---|---|---|
grep PATTERN file | awk / sed / grep で grep PATTERN file を実務運用で使う | $ grep "ERROR" /var/log/app.log | |
grep -E | awk / sed / grep で grep -E を実務運用で使う | $ grep -E "error|warn" app.log | |
grep -v | awk / sed / grep で grep -v を実務運用で使う | $ grep -v "healthcheck" access.log | |
grep -n | awk / sed / grep で grep -n を実務運用で使う | $ grep -n "timeout" app.log | |
grep -i | awk / sed / grep で grep -i を実務運用で使う | $ grep -i "fatal" app.log | |
grep -A -B -C | awk / sed / grep で grep -A -B -C を実務運用で使う | $ grep -C 3 "panic" app.log | |
grep -r | awk / sed / grep で grep -r を実務運用で使う | $ grep -rn "listen" /etc/nginx | |
grep --include | awk / sed / grep で grep --include を実務運用で使う | $ grep -r --include="*.conf" "server_name" /etc/nginx | |
grep -o | awk / sed / grep で grep -o を実務運用で使う | $ grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.log | |
grep -c | awk / sed / grep で grep -c を実務運用で使う | $ grep -c " 500 " access.log | |
sed s/x/y/g | awk / sed / grep で sed s/x/y/g を実務運用で使う | $ sed "s/old/new/g" file.txt | |
sed -i | awk / sed / grep で sed -i を実務運用で使う | $ sed -i.bak "s/DEBUG/INFO/g" app.conf | |
sed -n p | awk / sed / grep で sed -n p を実務運用で使う | $ sed -n "10,20p" app.log | |
sed address delete | awk / sed / grep で sed address delete を実務運用で使う | $ sed "/healthcheck/d" access.log | |
sed line range | awk / sed / grep で sed line range を実務運用で使う | $ sed "1,5s/foo/bar/g" file.txt | |
sed append | awk / sed / grep で sed append を実務運用で使う | $ sed "/server {/a\ add_header X-Test yes;" nginx.conf | |
sed multiline N | awk / sed / grep で sed multiline N を実務運用で使う | $ sed -n "N;/foo\nbar/p" file.txt | |
sed print matching | awk / sed / grep で sed print matching を実務運用で使う | $ sed -n "/ERROR/p" app.log | |
sed extract group | awk / sed / grep で sed extract group を実務運用で使う | $ sed -n "s/^user=\([^ ]*\).*/\1/p" app.log | |
sed newline literal | awk / sed / grep で sed newline literal を実務運用で使う | $ sed "s/,/\n/g" values.csv | |
awk print field | awk / sed / grep で awk print field を実務運用で使う | $ awk "{print $1, $NF}" access.log | |
awk BEGIN FS | awk / sed / grep で awk BEGIN FS を実務運用で使う | $ awk "BEGIN{FS=":"}{print $1}" /etc/passwd | |
awk -F | awk / sed / grep で awk -F を実務運用で使う | $ awk -F, "{print $1,$3}" users.csv | |
awk printf | awk / sed / grep で awk printf を実務運用で使う | $ awk "{printf "%-20s %s\n", $1, $2}" file.txt | |
awk sum | awk / sed / grep で awk sum を実務運用で使う | $ awk "{sum += $5} END{print sum}" access.log | |
awk associative array | awk / sed / grep で awk associative array を実務運用で使う | $ awk "{count[$1]++} END{for (ip in count) print count[ip], ip}" access.log | |
awk length | awk / sed / grep で awk length を実務運用で使う | $ awk "length($0) > 120" app.log | |
awk select numeric | awk / sed / grep で awk select numeric を実務運用で使う | $ awk "$9 >= 500 {print}" access.log | |
awk substr | awk / sed / grep で awk substr を実務運用で使う | $ awk "{print substr($0,1,80)}" app.log | |
awk ENVIRON | awk / sed / grep で awk ENVIRON を実務運用で使う | $ awk "BEGIN{print ENVIRON["HOME"]}" | |
grep awk top IP | awk / sed / grep で grep awk top IP を実務運用で使う | $ grep " 500 " access.log | awk "{print $1}" | sort | uniq -c | sort -nr | head | |
CSV column extract | awk / sed / grep で CSV column extract を実務運用で使う | $ awk -F, "NR>1 {print $2}" users.csv | |
Apache top 10 IP | awk / sed / grep で Apache top 10 IP を実務運用で使う | $ awk "{print $1}" access.log | sort | uniq -c | sort -nr | head -10 | |
Specific IP count | awk / sed / grep で Specific IP count を実務運用で使う | $ grep "192.0.2.10" access.log | wc -l | |
Replace config safely | awk / sed / grep で Replace config safely を実務運用で使う | $ sed -i.bak "s/^worker_processes.*/worker_processes auto;/" /etc/nginx/nginx.conf | |
Extract status code | awk / sed / grep で Extract status code を実務運用で使う | $ awk "{print $9}" access.log | sort | uniq -c | sort -nr | |
Filter time range | awk / sed / grep で Filter time range を実務運用で使う | $ awk "$4 >= "[14/May/2026:10" && $4 < "[14/May/2026:11"" access.log | |
Find unique errors | awk / sed / grep で Find unique errors を実務運用で使う | $ grep -E "ERROR|FATAL" app.log | sed "s/[0-9-]{10}.*/.../" | sort -u |