ds# ■ はじめに
文字列検索 / グレップ(grep)について扱っていく
目次
【1】grepコマンドの種類 1)grepコマンド 2)egrepコマンド 3)fgrepコマンド 【2】grepのオプション 1)-Aオプション 2)-v オプション 3)-e オプション 4)-m オプション 【3】Tips 1)正規表現 ^ (論理行頭) 【4】サンプル 例1:簡単な例 例2:ファイルの内容を検索 例3:設定ファイルのコメント文「#」以外を取り除く 例4:インスールされているか確認する 例5:ファイル内のキーワードを抜き出す 例6:tailでキーワードの出力結果を監視する 例7:プロセスKill
【1】grepコマンドの種類
1)grepコマンド
* Global Regular Expression Print : 全体から正規表現で抽出するコマンド
2)egrepコマンド
* Extended GREP : 拡張グレップコマンド * より強力な拡張正規表現が使える(複数の検索が一度にできる等)
3)fgrepコマンド
* Global Regular Expression Print : 全体から正規表現で抽出するコマンド * grepやegrepよりも早いが限定的な正規表現しか使えない
【2】grepのオプション
| オプション | 説明 |
|---|---|
| -A | マッチした箇所から後の行を、指定した行数分表示 |
| -n | 行番号を表示 |
| -v | 一致しなかった行を表示 |
| -i | 大文字小文字を区別しない(ignore-case, case sensitivie) |
| -e | 検索条件 |
| -w | 指定文字列が単語として含まれている行を表示(grep -w add * => OK:'add some', 'add_some', NO: 'additional' ) |
| -m | 一致した回数を指定する |
| -r | ディレクトリ内も検索対象とする |
* 以下のサイトも参照
https://ctf-service.com/?p=306
1)-Aオプション
* マッチした箇所から後の行を、指定した行数分表示
構文
grep [キーワード1] -A [行数(e.g. 10)]
2)-v オプション
* キーワードで省きたい場合
3)-e オプション
* 複数キーワードがある場合に使用
構文
grep -e [キーワード1] -e [キーワード2] ... [ファイル名]
例:「8080」又は「8443」を抜き出す
grep -e 8080 -e 8443 sample.log
参考文献
https://www.atmarkit.co.jp/ait/articles/1604/15/news019.html
4)-m オプション
* 一致した回数を指定する
構文
grep -m X [キーワード] [ファイル名]
例:1件ヒットしたら完了する
# grep -m 1 hello_world sample.csv
参考文献
https://qiita.com/tsubasaogawa/items/0c491199fad59e20e16d
【3】Tips
1)正規表現 ^ (論理行頭)
* ^XXX : 先頭文字「XXX」を指定できる
コマンド例
https://dk521123.hatenablog.com/entry/2025/03/15/231209
# 先頭行がEで始まるログを抽出 kubectl -n cube-system logs kube-proxy-xxxxx | grep ^E # => 「E0314 12:34:56.123456 1 server.go:234 ... 」っとエラーが拾える
【4】サンプル
例1:簡単な例
サンプルデータ
00-111-222,Mike,xx1 00-111-223,Mike,xx2 00-111-224,Mike,xx3 00-111-225,Mike,xx4 00-111-226,Mike,xx5 00-111-227,Mike,xx6 00-111-228,Mike,xx7 00-111-229,Mike,xx8 00-111-230,Mike,xx9
コマンド例
$ grep '00-111-229' *.csv data.csv:00-111-229,Mike,xx8 $ fgrep '00-111-229' *.csv data.csv:00-111-229,Mike,xx8
例2:ファイルの内容を検索
構文
grep "キーワード" -nr
コマンド例
grep "Hello world" -nr
例3:設定ファイルのコメント文「#」以外を取り除く
構文
sudo egrep -e^[^#] 【ファイル】
コマンド例
sudo egrep -e^[^#] /etc/clamd.d/scan.conf
例4:インスールされているか確認する
構文
yum list installed | grep 【パッケージ名】
コマンド例
# MySQLがインストールされているか確認 yum list installed | grep mysql
例5:ファイル内のキーワードを抜き出す
構文
grep 【キーワード】 【ファイル】 | less
コマンド例
# gc.log 内の「Full GC」を抜き出す grep "Full GC" gc.log | less
例6:tailでキーワードの出力結果を監視する
構文
tail -f 【ファイル】 | grep 【キーワード】
コマンド例
# gc.log 内の「Full GC」を抜き出す tail -f gc.log | grep "Full GC"
例7:プロセスKill
構文
ps aux | grep "キーワード" | grep -v grep | awk '{print $2}' | xargs kill -9
コマンド例
# まずは、プロセス一覧が取れるか試してみる $ ps aux | grep "hello.py" | grep -v grep root 179 0.0 0.4 30092 16792 ? Ss 17:00 0:00 ... ・・・ # 2列目の「179」を取得したいので # ps aux | grep "キーワード" | grep -v grep | awk '{print $2}' $ ps aux | grep "hello.py" | grep -v grep | awk '{print $2}' 179 ・・・ # ps aux | grep "キーワード" | grep -v grep | awk '{print $2}' | xargs kill -9 $ ps aux | grep "hello.py" | grep -v grep | awk '{print $2}' | xargs kill -9
参考文献
https://www.qoosky.io/techs/7149afb35f
https://ameblo.jp/oregano-blog/entry-11541189136.html
https://eng-entrance.com/linux-command-grep
関連記事
大きいファイルを扱う際のコマンド
https://dk521123.hatenablog.com/entry/2020/06/12/000000
findコマンド
https://dk521123.hatenablog.com/entry/2023/12/05/000000
デバッグに役立つkubectlコマンド ~ kubectl logs ~
https://dk521123.hatenablog.com/entry/2025/03/15/231209