検索
文字列を探す(grep・rg)
ファイルの中から文字列やパターンを探す grep と、より速い ripgrep(rg)。正規表現の早見表つき。
grepパターンに一致する行を探す
ファイルの中や、ほかのコマンドの出力から、指定した文字列やパターンを含む行を探して表示します。
grep [オプション] <パターン> [ファイル...]| オプション | 意味 |
|---|---|
-i | 大文字小文字を区別しない |
-r / -R | ディレクトリを再帰的に探す(-R はシンボリックリンクもたどる) |
-n | 行番号を表示 |
-v | 一致しない行を表示 |
-w | 単語として一致するものだけ |
-x | 行全体が一致するものだけ |
-c | 一致した行数だけ表示 |
-l / -L | 一致した / しなかったファイル名だけ表示 |
-o | 一致した部分だけ表示 |
-E | 拡張正規表現(egrep と同じ) |
-F | 正規表現ではなく、そのままの文字列として探す(fgrep と同じ) |
-A N / -B N / -C N | 一致した行の後 / 前 / 前後 N 行も表示 |
-e | パターンを複数指定する |
--include / --exclude | 探すファイル名を絞る / 除く |
--exclude-dir | 除くディレクトリ |
$ grep -n "TODO" main.go
$ grep -rni "password" ./config
$ grep -rl "useState" src/ --include='*.tsx'
$ grep -v '^#' nginx.conf | grep -v '^$' # コメントと空行を除く
$ grep -E 'error|warn' app.log
$ grep -o '[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}' access.log | sort | uniq -c | sort -rn | head # IPアドレスの集計
$ grep -C 3 "panic" server.log
$ ps aux | grep [n]ginx # grep 自身を結果に含めない小技rg (ripgrep)速くて賢い grep
Ubuntu には最初から入っていません。 で入れられます。
.gitignore を自動で読み、node_modules などを飛ばして再帰的に探します。大きなリポジトリでも grep -r よりずっと速いです。
| オプション | 意味 |
|---|---|
-i / -S | 大文字小文字を区別しない / パターンに大文字があるときだけ区別する |
-w | 単語として一致 |
-F | そのままの文字列として探す |
-t <種類> / -T <種類> | 指定した種類のファイルだけ / 除く(rg --type-list で一覧) |
-g '<glob>' | ファイル名で絞る(! を付けると除く) |
-l | ファイル名だけ |
-c | ファイルごとの件数 |
-C N | 前後 N 行も表示 |
--hidden / -uu | 隠しファイルも / .gitignore も無視して全部探す |
-r <置換> | 表示するときに一致部分を置き換える(ファイルは書き換えない) |
$ rg "fetchUser"
$ rg -t go "func main"
$ rg -g '*.md' -g '!node_modules' "TODO"
$ rg -l "deprecated" | xargs sed -i 's/oldApi/newApi/g'
$ rg --hidden "API_KEY"
$ rg -F "a.b(c)" # 記号をそのまま探す正規表現の早見表
| 書き方 | 意味 | grep(基本) での書き方 |
|---|---|---|
. | 任意の1文字 | 同じ |
^ / $ | 行頭 / 行末 | 同じ |
* | 直前を0回以上 | 同じ |
+ / ? | 直前を1回以上 / 0か1回 | \+ / \? |
{m,n} | 直前をm〜n回 | \{m,n\} |
[abc] / [^abc] | どれか1文字 / それ以外 | 同じ |
(a|b) | a か b | \(a|b\) |
\b | 単語の境目 | 同じ |
\d / \s / \w | 数字 / 空白 / 英数字 | [0-9] / [[:space:]] / \w |