「Linuxコマンド - grep」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
10行目: 10行目:
  grep <検索正規表現> <ファイル名>
  grep <検索正規表現> <ファイル名>
<br>
<br>
例えば、testディレクトリ内の全てのファイルから、aという文字を検索する場合を以下に示す。<br>
以下の例では、testディレクトリに存在する全てのファイルから、hogeという文字列を検索している。<br>
  grep a test/*
<code>-n</code>オプションを付加することで、マッチしたファイルの行番号も表示する。<br>
<code>-r</code>オプションを付加することで、サブディレクトリに存在するファイルも再帰検索する。<br>
  grep "hoge" -nr test/*
<br>
<br>
===== grepコマンドのand検索 =====
===== grepコマンドのand検索 =====
grepコマンドでは、2つ以上の条件を設定して検索するand検索ができる。<br>
grepコマンドでは、2つ以上の条件を設定して検索するand検索ができる。<br>

2021年2月1日 (月) 02:24時点における版

概要

grepコマンドとは、ファイル中の文字列に対して、正規表現を使って検索して表示するコマンドである。
ここでは、grepの基本操作を記載する。


grepコマンドの基本

grepコマンドの基本動作

grepコマンドは、ファイル中の文字列を検索するコマンドである。
使用方法は、次に示す通り、シンプルなものになっている。

grep <検索正規表現> <ファイル名>


以下の例では、testディレクトリに存在する全てのファイルから、hogeという文字列を検索している。
-nオプションを付加することで、マッチしたファイルの行番号も表示する。
-rオプションを付加することで、サブディレクトリに存在するファイルも再帰検索する。

grep "hoge" -nr test/*


grepコマンドのand検索

grepコマンドでは、2つ以上の条件を設定して検索するand検索ができる。
基本的には、パイプで繋げて記述する。

grep <検索文字列> <ファイル名> | grep <検索文字列2>


1文の中でのand検索では、次のように正規表現を使う。
.は任意の文字、*は直前の文字の0個以上の繰り返しを表す正規表現である。

grep <スタートの検索文字列.*終わりの検索文字列> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、rで始まりpで終わる文字列が存在する行を検索するには、以下のようにする。

grep r.*p work/*



grepコマンドのオプション

-iオプション : 大文字と小文字を区別せず検索する

grepコマンドに-iオプションをつけると、大文字と小文字を区別せずに検索できる。

grep –i 検索正規表現 ファイル名


例えば、testディレクトリ内の全てのファイルから大文字のAと小文字のaが区別なく検索するには、以下のようにする。

grep –i a test/*


-Eオプション : 拡張正規表現で検索を行う

2つの条件のOR検索を行うには、|のOR演算子を使用するが、そのためには拡張正規表現を使う必要がある。
その拡張席表現をするものが、-Eオプションである。

grep –E <検索正規表現> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、小文字のpまたはeのいずれかを検索するには、以下のようにする。

grep –E 'p|e' test/*


grepコマンドは、多くの正規表現を使用することができる。
ただし、grepコマンドの正規表現の記述方法は、他のプログラム言語の正規表現はやや異なっているので注意する。

下表に、grepコマンドで使用できる正規表現を示す。
併せて、sedコマンドとawkコマンドの正規表現も記載する。

grep sed awk 意味
. . . 任意の1文字
* * * 直前の1文字または1パターンの0回以上の繰り返し
^ ^ ^ 行の先頭
$ $ $ 行の末尾
\( \) \( \) () パターンのグループ化
\1 \2 \3 \1 \2 \3 後方参照
[ ] [ ] [ ] 括弧内の任意の1文字
\{n\} \{n\} {n} 直前の1文字または1パターンのn回の繰り返し
\{n, \} \{n, \} {n, } 直前の1文字または1パターンのn回以上の繰り返し
\{n, m\} \{n, m\} {n, m} 直前の1文字または1パターンのn回以上かつm回以下の繰り返し
\+ \+ + 直前の1文字あるいは1パターンの1回以上の繰り返し
\? ? 直前の1文字あるいは1パターンの0回または1回だけ出現
\| \| | 2 パターンのうちどちら片方


-eオプション : 一致処理に指定した正規表現

-eオプションは、一致処理に指定した正規表現を行うオプションであるが、実際には、OR検索を行う時に使用する。

grep –e <検索正規表現1> –e <検索正規表現2> <ファイル名>


例えば、-eオプションを使用して、testディレクトリ内の全てのファイルから、大文字のpまたはeのいずれかを検索するには、以下のようにする。

grep –e p –e e work/*


-vオプション : 一致しないものを検索する

-vオプションは、一致しないものを検索する時に使用する。

grep –v <検索正規表現> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、1の文字を含まないものを検索するには、以下のようにする。

grep -v 1 test/*


-nオプション : 検索結果に行番号を表示する

-nオプションは、検索結果に行番号を表示する。

grep –n <検索正規表現> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、aを検索して結果を行番号と合わせて表示するには、以下のようにする。

grep -n a test/*


-lオプション : 検索結果にファイル名のみ表示する

-lオプションは、検索した結果にファイル名のみを表示したい時に使用する。

grep –l <検索正規表現> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、aの文字を検索してファイル名を表示するには、以下のようにする。

grep -l a test/*


-hオプション : 検索結果にファイル名を表示しない

-hオプションは、検索した結果にファイル名を表示しない時に使用する。

grep –h <検索正規表現> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、hの文字を検索してファイル名は表示しない場合は、以下のようにする。

grep -h a test/*


また、ファイル名を表示せずに行番号と該当内容のみ表示する場合は、-nオプションと-hオプションを組み合わせる。
例えば、testディレクトリ内の全てのファイルから、aの文字を検索して行番号とファイル名の表示をするには、以下のようにする。

grep -nh a test/*


-oオプション : 検索結果に一致した文字を表示する

-oオプションは、検索した時に該当したファイルを表示する。

grep –o <検索正規表現> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、pで始まりeで終わる文字を検索して、該当の文字とともに表示する場合は、以下のようにする。

grep -o p.*e test/*


-Cオプション : 検索結果に一致した箇所から前後に指定した行数を表示する

-Cオプションは、検索した結果に合わせて、前後に指定した行数を表示する。

grep –C <行数> <検索正規表現> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、2の文字を検索して、あわせて、前後に行ずつ表示する場合は、以下のようにする。

grep -C 1 2 test/*


-rオプション : ディレクトリ内も検索対象とする

-rオプションは、ディレクトリ内を再帰検索する時に使用する。

grep –r <検索正規表現> <ファイル名>


例えば、testディレクトリ内にある下層のディレクトリも含めて全てのファイルから、aの文字を検索するには、以下のようにする。

grep -r a test/*


-Lオプション : 検索した結果、該当しなったファイルを表示する

-Lオプションは、検索した結果、該当しなったファイルを表示する。

grep –L <検索正規表現> <ファイル名>


例えば、testディレクトリ内の全てのファイルから、aを検索した結果、該当しなかったファイルを表示する場合は、以下のようにする。

grep -L a test/*