【Linux】文字列検索 / グレップ ~ grep / egrep / fgrep ~

■ はじめに

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

目次

【1】grepコマンドの種類
 1)grep
 2)egrep
 3)fgrep
【2】grepのオプション
【3】サンプル
 例1:簡単な例
 例2:設定ファイルのコメント文「#」以外を取り除く
 例3:インスールされているか確認する
 例4:ファイル内のキーワードを抜き出す
 例5:tailでキーワードの出力結果を監視する

【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 一致した回数を指定する

-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:設定ファイルのコメント文「#」以外を取り除く

構文

sudo egrep -e^[^#] 【ファイル】

コマンド例

sudo egrep -e^[^#] /etc/clamd.d/scan.conf

例3:インスールされているか確認する

構文

yum list installed | grep 【パッケージ名】

コマンド例

# MySQLがインストールされているか確認
yum list installed | grep mysql

 例4:ファイル内のキーワードを抜き出す

構文

grep 【キーワード】 【ファイル】 | less

コマンド例

# gc.log 内の「Full GC」を抜き出す
grep "Full GC" gc.log | less

例5:tailでキーワードの出力結果を監視する

構文

tail -f 【ファイル】 | grep 【キーワード】

コマンド例

# gc.log 内の「Full GC」を抜き出す
tail -f gc.log | grep "Full GC"

参考文献

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