Looking for grep Answers? Try Ask4KnowledgeBase
Looking for grep Keywords? Try Ask4Keywords

grepgrepを使い始める


備考

grepは、ファイル内のパターンに一致する行を出力します。

grepは正規表現を使用することができ、結果の品質を向上させるためにいくつかのオプションがあります。

参考文献

バージョン

POSIX grep

バージョン発売日
POSIX.2 1992-01-01
IEEE Std 1003.1-2001 2001-12-06
IEEE Std 1003.1,2004 Edition 2004-01-01
IEEE Std 1003.1、2013 Edition 2013年4月19日
IEEE Std 1003.1,2016 Edition 2016-09-30

Illumos / OpenSolaris grep

バージョン 発売日
2005-06-14 2005-06-14
2005-09-06 2005-09-06
2012-03-30 2012-03-30
2012-09-17 2012-09-17
2013-05-14 2013-05-14

GNU grep

バージョン発売日
2.0 1996-10-01
2.2 1998-04-27
2.3 1999-02-14
2.4.1 2000-03-01
2.4.2 2000-03-09
2.4 1999-12-03
2.5.1 2004-10-29
2.5.1a 2004年11月19日
2.5.3 2007年8月2日
2.5.4 2009-02-09
2.5 2002年3月13日
2.6.1 2010-03-25
2.6.2 2010-03-29
2.6.3 2010-04-02
2.6 2010-03-23
2.7 2010-09-20
2.8 2011-05-13
2.9 2011-06-21
2.10 2011-11-16
2.11 2012-03-02
2.12 2012-04-23
2.13 2012-07-04
2.14 2012-08-20
2.15 2013年10月26日
2.16 2014-01-01
2.17 2014-02-17
2.18 2014-02-20
2.19 2014-05-22
2.20 2014-06-03
2.21 2014-11-23
2.22 2015-11-01
2.23 2016-02-04
2.24 2016-03-10
2.25 2016-04-21
2.26 2016-10-02
2.27 2016-12-06
2.28 2017-02-06

BSD grep / FreeGrep

バージョン発売日
OpenBSD 3.0 2001-12-01
OpenBSD 3.4 2003-11-01
OpenBSD 3.5 2004-05-01
OpenBSD 3.6 2004年11月1日
OpenBSD 3.7 2005-05-19
OpenBSD 3.8 2005-11-01
OpenBSD 3.9 2006-05-01
OpenBSD 4.0 2006-11-01
OpenBSD 4.1 2007-05-01
OpenBSD 4.3 2008-05-01
OpenBSD 4.8 2010-11-01
OpenBSD 5.0 2011-11-01
OpenBSD 5.3 2013-05-01
OpenBSD 5.7 2015-05-01
OpenBSD 5.8 2015-10-18
OpenBSD 5.9 2016-03-29
NetBSD 2.0 2004年12月9日
NetBSD 4.0 2007-12-19
NetBSD 6.0 2012-10-17
NetBSD 7.0 2015-09-25
FreeBSD 9.0 2012-01-02
FreeBSD 10.0 2014-01-16

基本的な使用法

コマンドの実行:

grep sam someFile.txt
 

someFile.txt 含まれるもの:

fred 14 m foo
sam 68 m bar
christina 83 f baz
bob 22 m qux
Sam 41 m quux
 

この出力を生成します:

sam 68 m bar
 

特定のディレクトリ内のテキストを再帰的に検索する

GNU grepの使用

grep -r 'pattern' <directory path>
 

また、一致する行番号をリストするには、 -n オプションを使用します。

grep -rn 'pattern' <directory path>
 

特定のグロブパターンを持つファイルのみを検索するには

grep --include='*.txt' -r 'pattern' <directory path>
 

ファイルパターンまたはディレクトリを除外する

grep -R --exclude=*.log 'pattern' <directory path>
grep -R --exclude={*.log,*.class} 'pattern' <directory path>

grep -R --exclude-dir=tmp 'pattern' <directory path>
grep -R --exclude-dir={tmp,lib} 'pattern' <directory path>
 

メモとその他の便利なオプション

  • 現在のディレクトリで検索する場合、 <directory path> はスキップできます。
  • -R オプションは、コマンドライン上にある場合にのみシンボリックリンクに続く-r とは異なり、すべてのシンボリックリンクに続きます
  • -l 一致するファイルだけを一覧表示する
  • -h filename接頭辞を抑制する
  • 一致したパターンを強調表示する--color=auto
  • -m <num> :各ファイル入力の最大一致数を指定します。

再帰的に検索するPOSIXの回避策

find <directory path> -type f -exec grep -l 'pattern' {} +
 
  • 必要に応じて、 -n-l などのオプションを使用できます
  • {} + がサポートされていない場合、 {} \; 使用し{} \; 代わりに
  • ファイルタイプ、ディレクトリなどの組み込み/除外のようなfind コマンドの詳細については、 findドキュメントを参照してください。

Grepコンテキストコントロール

与えられたムービーリストと呼ばれるサンプル。

Troy
Gladiator
Robin Hood
King Arthur
BraveHeart
The Last Samurai
 

通常のgrepが返す

grep "Gladiator" movieslist
Gladiator
 

さて、grepを使ってファイルの下または上の行を印刷します。

下の行を印刷するには

grep -A 1 Gladiator movieslist 
Gladiator
Robin Hood
 

上記の行を印刷するには

grep -B 1 Gladiator movieslist 
Troy
Gladiator
 

両方を印刷するには

grep -C 1 Gladiator movieslist 
Troy
Gladiator
Robin Hood
 

大文字小文字を無視する

与えられたファイルsample

hello
Hello
HELLO_there
 

"hello"の通常のgrep は次を返します:

$ grep "hello" sample 
hello
 

-i を使うと、大文字小文字を無視して "hello"にマッチすることができます:

$ grep -i "hello" sample
hello
Hello
HELLO_there
 

単語全体にマッチ

与えられたファイルsample

hello world
ahello here
hello_there
 

"hello"の通常のgrep は次を返します:

$ grep hello sample 
hello world
ahello here
hello_there
 

-w 使用すると、単語全体を構成する一致を含む行を選択できます。

$ grep -w hello sample 
hello world
 

行の一致する部分だけを出力します。

echo "Prints only the matching part of the lines" | grep -o "matching"
# prints matching