【Linux】grep / egrep / fgrepコマンド

ds# ■ はじめに

文字列検索 / グレップ(grep)について扱っていく

目次

【1】grepコマンドの種類
 1)grepコマンド
 2)egrepコマンド
 3)fgrepコマンド
【2】grepのオプション
【3】サンプル
 例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のオプション

# オプション 説明
1 -n 行番号を表示
2 -v 一致しなかった行を表示
3 -i 大文字小文字を区別しない(ignore-case, case sensitivie)
4 -e 検索条件
5 -w 指定文字列が単語として含まれている行を表示(grep -w add * => OK:'add some', 'add_some', NO: 'additional' )
6 -m 一致した回数を指定する
7 -r ディレクトリ内も検索対象とする

-v オプション

* キーワードで省きたい場合

-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

-m オプション

* 一致した回数を指定する

構文

grep -m X [キーワード] [ファイル名]

例:1件ヒットしたら完了する

# 
grep -m 1 hello_world sample.csv

参考文献
https://qiita.com/tsubasaogawa/items/0c491199fad59e20e16d

【3】サンプル

例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