20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linux grepコマンドの使い方

Last updated at Posted at 2021-01-03

__grepコマンドとは__

ファイルの中の特定の文字列(パターン)がある行を抽出するコマンド
Linuxコマンドの中で最もよく使うコマンドの1つ

基本書式

grep [オプション] 検索パターン ファイル名 [ファイル名] #ファイル名は複数指定できる

もしくは

コマンド | grep [オプション] 検索パターン
※[]は省略可

オプション

●検索関連のオプション 

オプション 意味 サンプルコード
-E 検索に拡張正規表現を使う 使用例1
-i 大文字と小文字を区別せずに検索する 使用例2
-P 検索にPerl正規表現を使う 使用例3
-x 行全体がパターンと一致するものを検索する 使用例4

●表示関連のオプション

オプション 意味 サンプルコード
-A 行数 一致した行の後の行も表示する 使用例5
-b パターンの前に何文字あるかを併せて表示する 使用例6
-B 行数 一致した行の前の行も表示する 使用例7
-c 一致するものが含まれている回数のみ表示 使用例8
-C 行数 一致した行の前後の行も表示する 使用例9
-h ファイル名を表示しない(複数ファイル指定時) 使用例10
-H ファイル名を併せて表示する 使用例11
-l 一致するものが含まれているファイルのファイル名のみ表示する 使用例12
-L 一致するものが含まれていないファイルのファイル名のみ表示する 使用例13
-m 回数 パターンと一致するものを含む行が指定した数に達したら処理を終了する 使用例14
-n 行番号を併せて表示する 使用例15
-o 一致した箇所だけを表示する 使用例16
-q 結果を表示しない(主にシェルスクリプトなどで判定用に使う) 使用例17
-v パターンに一致しない行を表示する 使用例18

●検索対象関連のオプション

オプション 意味 サンプルコード
-r ディレクトリを指定した場合はサブディレクトリ内のファイルも含めて検索する 使用例19
-R サブディレクトリも含めて検索、さらにシンボリックリンクの先 使用例20

####基本使用例

#/etc/passwdファイルの中身を「hoge」で検索する場合

grep hoge /etc/passwd
  実行結果
  hoge:x:1000:1000::/home/hoge:/bin/bash     #「hoge」が含まれる行が表示される

#コマンドの実行結果について任意のパターンを検索する場合

cat /etc/passwd | grep HOGE
  実行結果
 HOGE:x:1001:1001::/home/HOGE:/bin/bash     #コマンドの実行結果から「HOGE」が含まれる行だけが表示される

  ##「cat /etc/passwd」のみだと下記のような実行結果(ファイルの中身を全て表示する)
   root:x:0:0::/root:/bin/bash
    ・
    ・
    ・
    hoge:x:1000:1000::/home/hoge:/bin/bash
    HOGE:x:1001:1001::/home/HOGE:/bin/bash
    ・
    ・
    ・

#複数のファイルを指定して検索する場合
/etc/test.txt
aaa
bbb
ccc
ddd
eee
fff

/etc/test1.txt
aaa
aaa
bbb
aaa
bbb
ccc

grep aaa /etc/test.txt /etc/test1.txt
  実行結果
  test.txt:aaa
  test1.txt:aaa
  test1.txt:aaa
  test1.txt:aaa

#/etc/passwdファイルの中身を正規表現で検索する場合

grep ^h... /etc/passwd
  実行結果
  halt:x:7:0:halt:/sbin:/sbin/halt     #最初に「h」から始まる4文字の単語が含まれる行が表示される
  hoge:x:1000:1000::/home/hoge:/bin/bash     #正規表現の詳細については別ページ参照
  

####使用例1
検索に拡張正規表現を使う

#/etc/sysconfig/network-script/enp0s3ファイルの中身を拡張正規表現で検索

grep -E "((25[0-5]|1[0-9][0-9]|[0-9]?[0-9])\.){3}(25[0-5]|1[0-9][0-9]|[0-9]?[0-9])" /etc/sysconfig/network-scripts/ifcfg-enp0s3
  実行結果
  IPADDR=192.168.0.2     #IPアドレスが含まれる行が表示される
  GATEWAY=192.168.0.1
  DNS1=8.8.8.8

####使用例2
大文字と小文字を区別せずに検索する


#/etc/passwdファイルの中身を大文字・小文字の区別なく「hoge」で検索

grep -i hoge /etc/passwd
  実行結果 
  hoge:x:1000:1000::/home/hoge:/bin/bash     #大文字・小文字関係なく、「hoge」と「HOGE」のどちらでも含まれる行が表示される。
  HOGE:x:1001:1001::/home/HOGE:/bin/bash     #「Hoge」や「hogE」を含む行があれば、その行も表示される

####使用例3
Perl正規表現を使って表現する


#/etc/httpd/conf/httpd.confファイルの中身をPerl正規表現を使って検索

grep -P "\d" /etc/httpd/conf/httpd.conf     #数字が含まれる行が表示されるように検索
  実行結果
  # See <URL:http://httpd.apache.org/docs/2.4/> for detailed infomation.
  # <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
  ・
  ・
  ・

####使用例4
行全体がパターンと一致する行があるか検索する

#行全体がパターンと一致する行が含まれているか確認する場合

grep -x IPADDR=192.168.0.2 /etc/sysconfig/network-scripts/ifcfg-enp0s3
  実行結果
  IPADDR=192.168.0.2     #行全体がパターンと一致する行のみ表示される

  ##grep -x IPADDR= /etc/sysconfig/network-scripts/ifcfg-enp0s3 と実行した場合
    実行結果なし     #行全体がパターンと一致する行が無いと何も表示されない
    

####使用例5
一致した行の後の行も表示する

#/etc/test.txtをAオプションで検索する場合

/etc/test.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff

grep -A1 ccc /etc/text.txt
  実行結果
  3 ccc     #パターンと一致した3行目と1つ後の4行目が表示される
  4 ddd

grep -A2 ccc /etc/text.txt
  実行結果
  3 ccc     #パターンと一致した3行目と後ろの4行目と5行目が表示される
  4 ddd
  5 eee
 

####使用例6
パターンの前に何文字あるかを併せて表示する


#/etc/test.txtをbオプションで検索する場合

/etc/test.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff

grep -b fff test.txt
  実行結果
 20:fff     #パターンと一致した文字列の前に何文字あるかを一緒に表示される(改行や空白も1文字に含まれる)

####使用例7
一致した行の前の行も表示する


#/etc/teat.txtをBオプションで検索する場合

/etc/test.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff

grep -B1 fff /etc/test.txt
  実行結果
  5 eee     #パターンと一致した6行目とその前の5行目が表示される
  6 fff

grep -B2 fff /etc/test.txt
  実行結果
  4 ddd     #パターンと一致した6行目とその前の4行目と5行目が表示される
  5 eee     #「-B」の後の数字で何行前まで表示するか決められる
  6 fff
 

####使用例8
パターンと一致したものが含まれる行の行数のみを表示する


#/etc/test1.txtをcオプションで検索する場合

/etc/test1.txt
1 aaa
2 aaa
3 bbb
4 aaa
5 bbb
6 ccc

grep -c aaa /etc/test1.txt
  実行結果
  3     #パターンと一致したものが含まれる行の行数のみ表示

####使用例9
一致した行の前後の行も表示する


#/etc/test.txtをCオプションで検索する場合

/etc/test.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff

grep -C1 eee /etc/test.txt 
  実行結果
  4 ddd     #パターンと一致した5行目とその前後の4行目と6行目が表示される
  5 eee
  6 fff

grep -C2 ddd /etc/test.txtで検索
  実行結果
  2 bbb     #パターンと一致した4行目とその前後の2行目、3行目、5行目、6行目が表示される
  3 ccc     #「-C」の後の数字で前後何行目まで表示するかを決められる
  4 ddd
  5 eee
  6 fff

####使用例10
ファイル名を表示しない(複数のファイルを検索した場合のみ)


#/etc/test.txtと/etc/test1.txtをhオプションで検索する場合

/etc/test.txt
aaa
bbb
ccc
ddd
eee
fff

/etc/test1.txt
aaa
aaa
bbb
aaa
bbb
ccc

grep -h aaa /etc/test.txt /etc/test1.txtで検索
  実行結果
  aaa     #ファイル名が表示されない
  aaa
  aaa
  aaa

####使用例11
ファイル名も併せて表示される


#/etc/test.txtをHオプションで検索する場合

/etc/test.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff

grep -H aaa /etc/test.txt
  実行結果
  test.txt:aaa     #ファイル名が表示される

####使用例12
一致するものが含まれているファイルのファイル名のみ表示する


#/etc/test.txtと/etc/test1.txtをlオプションで検索する場合

/etc/test.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff

/etc/test1.txt
1 aaa
2 aaa
3 bbb
4 aaa
5 bbb
6 ccc

grep -l ddd /etc/test.txt /etc/test1.txt
  実行結果
  test.txt     #パターンと一致したものを含むファイル名のみが表示される

####使用例13
一致するものが含まれていないファイルのファイル名のみ表示する


#/etc/test.txtと/etc/test1.txtをLオプションで検索する場合

/etc/test.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff

/etc/test1.txt
1 aaa
2 aaa
3 bbb
4 aaa
5 bbb
6 ccc

grep -L ddd /etc/test.txt /etc/test1.txt
  実行結果
  test1.txt     #パターンと一致したものを含まないファイル名のみが表示される

####使用例14
パターンと一致するものを含む行が指定した数に達したら処理を終了する


#/etc/test1.txtをmオプションで検索した場合

/etc/test1.txt
1 aaa
2 aaa
3 bbb
4 aaa
5 bbb
6 ccc

grep -m 2 aaa /etc/test1.txt
  実行結果
  1 aaa     #回数を2と指定したので1行目と2行目のみが表示される
  2 aaa

####使用例15
行番号を併せて表示する


#/etc/test.txtをnオプションで検索した場合

/etc/test.txt
aaa
bbb
ccc
ddd
eee
fff

grep -n ccc /etc/test.txt
  実行結果
  3 ccc     #行番号も併せて表示される

####使用例16
一致した箇所だけを表示する

#/etc/test2.txtをoオプションで検索した場合

/etc/test2.txt

aaa bbb ccc
ddd eee fff
ggg hhh iii

grep -o aaa /etc/test2.txt
  実行結果
  aaa     #パターンと一致した箇所のみ表示されるので、「bbb ccc」は表示されない

####使用例17
結果を表示しない(主にシェルスクリプトなどで判定用に使う)


#/etc/test.txtをqオプションで検索する場合

/etc/test.txt
aaa
bbb
ccc
ddd
eee
fff

grep -q aaa /etc/test.txt
  実行結果なし     #実行結果が表示されない

####使用例18
パターンに一致しない行を表示する


#/etc/test.txtをvオプションで表示する場合

/etc/test.txt
aaa
bbb
ccc
ddd
eee
fff

grep -v aaa /etc/test.txt
  実行結果
  bbb     #パターンと一致しない行が表示される
  ccc
  ddd
  eee
  fff


####使用例19
ディレクトリを指定した場合はサブディレクトリ内のファイルも含めて検索する


#/etc/test(ディレクトリ)をrオプションで検索した場合

下記のようなディレクトリ構造という想定
etc-test-testtest(ディレクトリ)-test1.txt(ファイル)
        -test.txt(ファイル)

/etc/test/test.txt
aaa
bbb
ccc
ddd
eee
fff

/etc/test/testtest/test1.txt
aaa
aaa
bbb
aaa
bbb
ccc

grep -r aaa /etc/test
  実行結果
  test.txt:aaa
  testtest/test1.txt:aaa     #サブディレクトリ(testtest)にあるファイルの中身まで検索される
  testtest/test1.txt:aaa
  testtest/test1.txt:aaa

####使用例20
サブディレクトリ、さらにシンボリックリンクの先まで含めて検索する

#/etc/testをRオプションで検索した場合

下記のようなディレクトリの構成を想定
etc-test-testtest(ディレクトリ)-test1.txt
        -test.txt
        -test.3txt(tteesstt.txtのシンボリックリンク)
    -tteesstt.txt

/etc/test/test.txt
aaa
bbb
ccc
ddd
eee
fff

/etc/test/testtest/test1.txt
aaa
aaa
bbb
aaa
bbb
ccc
zzz

/etc/tteesstt.txt
xxx
yyy
zzz

grep -R zzz /etc/test
  実行結果
  test/testtest/test1.txt:zzz     #サブディレクトリにあるファイルとシンボリックリンク先のファイルまで検索して表示する
  test/test3.txt:zzz   
                                                                                                                                                                                
20
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?