🐈

【Linux】grepコマンドの使い方

2021/09/03に公開

はじめに

Linuxでよく使用するgrepコマンドの使い方についてご紹介したいと思います。
※久々に基礎的なことをアウトプットします。

grepとは?

指定した文字列を検索する際に使用するコマンドになります。

grepのオプション

オプション 説明
-i 大文字と小文字を区別せず検索する
-E 拡張正規表現で検索を行う
-e 一致処理に指定した正規表現を使う
-v 一致しないものを検索する
-n 検索結果に行番号を表示する
-l 検索結果にファイル名のみ表示する
-h 検索結果にファイル名を表示しない
-o 検索結果に一致した文字を表示する
-C 検索結果に一致した箇所から前後に指定した行数表示する
-r ディレクトリ内も検索対象とする
-L 検索した結果、該当しなったファイルを表示する

grepコマンドの使い方

いくつかのパターンに分けて使い方をご紹介しています。
※僕が業務でよく使用する使い方になります。

①通常通り文字列を検索する。

  • ファイル内より指定の文字列を検索する。
コマンド
grep <検索文字列> <ファイル名>
実行例
[ec2-user@ip-10-0-0-47 ~]$ grep aiueo test
aiueo
[ec2-user@ip-10-0-0-47 ~]$

以下でも検索可能

コマンド
cat <ファイル名> | grep <検索文字列> 
実行例
[ec2-user@ip-10-0-0-47 ~]$ cat test | grep kakiku
kakikukeko
[ec2-user@ip-10-0-0-47 ~]$

※元ファイルは以下になります。

元ファイル
[ec2-user@ip-10-0-0-47 ~]$ cat test
aiueo
kakikukeko
test
satton
fajijeafoajfj
[ec2-user@ip-10-0-0-47 ~]$
  • ディレクトリ内よりファイルを検索
コマンド
ls -l <ディレクトリ名> | grep <検索文字列>
実行例
[ec2-user@ip-10-0-0-47 ~]$ ls -l /home/ec2-user | grep test1
-rw-rw-r-- 1 ec2-user ec2-user  0  93 07:30 test1
[ec2-user@ip-10-0-0-47 ~]$

②不要な文字列を除外する。

※プロセス検索を例に説明していきます。

プロセス一覧から対象のプロセスを検索した場合、2つヒットしてしまう。

プロセス検索
[ec2-user@ip-10-0-0-47 ~]$ ps -ef | grep lv
root      1685     1  0 07:21 ?        00:00:00 /usr/sbin/lvmetad -f
ec2-user  3398  3372  0 07:49 pts/1    00:00:00 grep --color=auto lv
[ec2-user@ip-10-0-0-47 ~]$

grep --color=auto lvはgrepコマンド実行時のプロセスのため除外したい。

そのような場合は、以下のように入力する。

コマンド
ps -ef | grep lv | grep -v grep
実行例
[ec2-user@ip-10-0-0-47 ~]$ ps -ef | grep lv | grep -v grep
root      1685     1  0 07:21 ?        00:00:00 /usr/sbin/lvmetad -f
[ec2-user@ip-10-0-0-47 ~]$

③検索結果に行番号を表示する。

以下のファイルよりtestを行番号付きでgrepする。

test
aiueo
kakikukeko
test
satton
fajijeafoajfj
Satton
コマンド
grep -n <検索文字列> <ファイル名>
実行例
[ec2-user@ip-10-0-0-47 ~]$ grep -n test test
3:test
[ec2-user@ip-10-0-0-47 ~]$

④大文字と小文字を区別せずに検索する。

以下のファイルよりSattonを抽出する。

test
aiueo
kakikukeko
test
satton
fajijeafoajfj
Satton

通常通りgrepした場合、小文字の文字列のみ表示される。

実行例
[ec2-user@ip-10-0-0-47 ~]$ grep satton test
satton
[ec2-user@ip-10-0-0-47 ~]$

-iのオプションを付与することにより、小文字と大文字が区別されずに表示される。

コマンド
grep -i <検索文字列> <ファイル名>
実行例
[ec2-user@ip-10-0-0-47 ~]$ grep -i satton test
satton
Satton
[ec2-user@ip-10-0-0-47 ~]$

さいごに

今回はLinuxのgrepコマンドの使い方についてご紹介しました。
気になる方がいれば、実際に使用してみては如何でしょうか。

参考リンク

grepコマンドの詳細まとめました【Linuxコマンド集】
grep【コマンド】とは|「分かりそう」で「分からない」

Discussion