grepコマンドは、文字列検索や特定の文字列を持つファイルの検索を行うことができます。
例えば、ファイルの中にあるパターンにマッチした行を検索や逆にパターンにマッチしなかった行を表示することが可能です。
目次
- 1 grepとは
- 2 grepコマンドの構文
- 3 パターンにマッチした行を抽出
- 4 大文字と小文字を区別しない (-iオプション)
- 5 複数のパターンを指定 (-eオプション)
- 6 複数のパターンをファイルで指定 (-fオプション)
- 7 マッチしない行を抽出 (-vオプション)
- 8 行がパターンにそのまま一致する行を抽出 (-xオプション)
- 9 パターンにマッチした行数を数える (-cオプション)
- 10 パターンにマッチする行数を制限 (-mオプション)
- 11 パターンにマッチした部分のみを抜き出す (-oオプション)
- 12 ファイル名を表示 (-Hオプション)
- 13 ファイル名を表示しない (-hオプション)
- 14 標準入力に渡されたものにラベルをつける (--labelオプション)
- 15 パターンにマッチした部分の行番号を表示 (-nオプション)
- 16 パターンにマッチしているファイルを検索 (-lオプション)
- 17 再帰的にパターンにマッチしているファイルを検索 (-rオプションと-lオプション)
- 18 再帰的にファイルに対してパターンにマッチした行を検索 (-rオプション)
- 19 再帰的な検索から検索項目を除外 (--excludeオプション) (--exclude-fromオプション) (--exclude-dirオプション)
- 20 指定のファイルのみを検索 (--includeオプション)
- 21 シンボリックリンクのディレクトリも再帰検索 (-Rオプション)
- 22 パターンにマッチした行の後ろのn行を表示 (-Aオプション)
- 23 パターンにマッチした行の前からn行を表示 (-Bオプション)
- 24 パターンにマッチした行の前後n行を表示 (-Cオプション)
- 25 前後に表示した時の行の区切り文字を変更 (--group-separator=string)
- 26 前後に表示したときの行の区切り文字を表示しない (--no-group-separator)
- 27 参考
grepとは
文字列検索やパターンにマッチしたファイルの検索を行うことができるコマンドです。
ファイルの文字列検索はマッチした行だけではなく、マッチしなかった行の表示も行うことができます。
パターンにマッチしたファイル名や行番号も表示することができます。
また、パターンにマッチした行の前後の行やパターンにマッチした行の行数の表示も行うことができます。
grepコマンドの構文
grepコマンドの構文
1 |
grep オプション パターン 入力ファイル |
オプション:0個以上のオプションをつけることができます。
パターン:'-e パターン' または '-f ファイル名'でパターンを指定する場合、必要ありません。
入力ファイル:0個以上の入力ファイルを指定できます。
パターンにマッチした行を抽出
itemtext.txtに書かれているappleのある行がすべて抽出されます。
コマンド例
1 |
grep apple itemtext.txt |
itemtext.txt
apple apple apple apple apple onion apple apple yuzu apple onion apple apple onion onion apple onion yuzu apple yuzu apple apple yuzu onion apple yuzu yuzu onion apple apple onion apple onion onion apple yuzu onion onion apple onion onion onion onion onion yuzu onion yuzu apple onion yuzu onion onion yuzu yuzu yuzu apple apple yuzu apple onion yuzu apple yuzu yuzu onion apple yuzu onion onion yuzu onion yuzu yuzu yuzu apple yuzu yuzu onion yuzu yuzu yuzu
実行結果
apple apple apple apple apple onion apple apple yuzu apple onion apple apple onion onion apple onion yuzu apple yuzu apple apple yuzu onion apple yuzu yuzu onion apple apple onion apple onion onion apple yuzu onion onion apple onion yuzu apple yuzu apple apple yuzu apple onion yuzu apple yuzu yuzu onion apple yuzu yuzu apple
端末(terminal)によってはcolorのオプションをつけると抽出したパターンが色付けされて、より分かりやすくなります。
例えば、
1 |
grep --color=auto apple itemtext.txt |
とするとappleという単語に色がついて、どこにappleという単語があるかがわかりやすくなります。
大文字と小文字を区別しない
(-iオプション)
-iオプションは、パターンの大文字と小文字を区別しないようになります。
どのような文字かだけがわかっている場合に利用することができます。
apt-cacheコマンドなどでパッケージを検索するときやシステム情報等を検索するときなどに便利です。
コマンド例では、sedコマンドで行の1番目にあるappleを大文字にしています。
コマンド例
1 |
sed s/apple/APPLE/ itemtext.txt | grep -i apple |
itemtext.txt ▼表示
実行結果
APPLE apple apple APPLE apple onion APPLE apple yuzu APPLE onion apple APPLE onion onion APPLE onion yuzu APPLE yuzu apple APPLE yuzu onion APPLE yuzu yuzu onion APPLE apple onion APPLE onion onion APPLE yuzu onion onion APPLE onion yuzu APPLE yuzu APPLE apple yuzu APPLE onion yuzu APPLE yuzu yuzu onion APPLE yuzu yuzu APPLE
複数のパターンを指定
(-eオプション)
-eオプションで指定するパターンを明示することができます。
また、-eオプションは複数つけることができ、複数つけると一致したパターンのいずれかが含まれていたら、その行が抽出されます。
コマンド例
1 |
grep -e"apple" -e"yuzu" itemtext.txt |
itemtext.txt ▼表示
実行結果
apple apple apple apple apple onion apple apple yuzu apple onion apple apple onion onion apple onion yuzu apple yuzu apple apple yuzu onion apple yuzu yuzu onion apple apple onion apple onion onion apple yuzu onion onion apple onion onion yuzu onion yuzu apple onion yuzu onion onion yuzu yuzu yuzu apple apple yuzu apple onion yuzu apple yuzu yuzu onion apple yuzu onion onion yuzu onion yuzu yuzu yuzu apple yuzu yuzu onion yuzu yuzu yuzu
複数のパターンをファイルで指定
(-fオプション)
-fオプションは複数のパターンはファイルによっても指定できます。
パターンの書き方は指定するパターンを一行ずつに分けて書きます。
コマンド例
1 |
grep -f pattern.txt itemtext.txt |
pattern.txt
1 2 |
apple yuzu |
itemtext.txt ▼表示
実行結果
apple apple apple apple apple onion apple apple yuzu apple onion apple apple onion onion apple onion yuzu apple yuzu apple apple yuzu onion apple yuzu yuzu onion apple apple onion apple onion onion apple yuzu onion onion apple onion onion yuzu onion yuzu apple onion yuzu onion onion yuzu yuzu yuzu apple apple yuzu apple onion yuzu apple yuzu yuzu onion apple yuzu onion onion yuzu onion yuzu yuzu yuzu apple yuzu yuzu onion yuzu yuzu yuzu
マッチしない行を抽出
(-vオプション)
-vオプションによって、appleに一致しない行が抽出されます。
余分なものをフィルタするときによく使われ、パイプなどで次のコマンドに渡す出力を制限するときに便利です。
コマンド例
1 |
grep -v apple itemtext.txt |
itemtext.txt ▼表示
実行結果
1 2 3 4 5 6 7 8 |
onion onion onion onion onion yuzu onion yuzu onion onion yuzu yuzu yuzu onion onion yuzu onion yuzu yuzu yuzu onion yuzu yuzu yuzu |
行がパターンにそのまま一致する行を抽出
(-xオプション)
-xオプションは、行がパターンにそのまま一致するときにその行を抽出します。パターンの指定で正規表現で^と$でパターンを囲んだもの("^pattern$"のようなもの)と同じになります。
コマンド例
1 |
grep -x apple itemtext.txt |
itemtext.txt ▼表示
実行結果 なし
別の例を出すと、以下のようになります。
コマンド例
1 |
grep -x apple x_opt.txt |
x_opt.txt
1 2 3 4 5 6 |
apple onion yuzu apple onion yuzu |
実行結果
1 2 |
apple apple |
-xオプションはほかのコマンドと組み合わせて利用できます。
例えば、itemtext.txtの3列目にあるappleとyuzuの数を数えるとします。
それは、以下のようなコマンドで数えることができます。
コマンド例
1 2 3 4 |
cut -d' ' -f3 itemtext.txt | grep -x -e"apple" -e"yuzu" | sort | uniq -c |
または、一行、すなわちワンライナーで入力すると
1 |
cut -d' ' -f3 itemtext.txt | grep -x -e"apple" -e"yuzu" | sort | uniq -c |
実行結果
1 2 |
9 apple 9 yuzu |
パターンにマッチした行数を数える
(-cオプション)
-cオプションでパターンにマッチした行数を数えることができます。
コマンド例
1 |
grep -c apple itemtext.txt |
itemtext.txt ▼表示
実行結果
1 |
19 |
コマンド例
1 |
grep -c -v apple itemtext.txt |
実行結果
1 |
8 |
パターンにマッチする行数を制限
(-mオプション)
-mオプションは、マッチした行数が指定した数値まで読み込むと、それ以降のそのファイルに対するパターンマッチングをストップします。
コマンド例
1 |
grep -m 3 apple itemtext.txt |
itemtext.txt ▼表示
実行結果
1 2 3 |
apple apple apple apple apple onion apple apple yuzu |
ファイルを複数選択していた場合の結果は、以下の通りになります。
ここで、itemtext2.txtはitemtext.txtのコピーになります。
コマンド例
1 |
grep -m 3 apple itemtext.txt itemtext2.txt |
実行結果
1 2 3 4 5 6 |
itemtext.txt:apple apple apple itemtext.txt:apple apple onion itemtext.txt:apple apple yuzu itemtext2.txt:apple apple apple itemtext2.txt:apple apple onion itemtext2.txt:apple apple yuzu |
パターンにマッチした部分のみを抜き出す
(-oオプション)
-oオプションは、パターンにマッチした部分のみを抜き出します。出力にはマッチした部分が行に分かれて表示されます。
コマンド例
1 |
grep -o apple itemtext.txt |
itemtext.txt ▼表示
実行結果
apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple apple
uniqコマンドと組み合わせれば、出てきたパターンの数を数え上げることができます。
コマンド例
1 |
grep -o apple itemtext.txt | uniq -c |
実行結果
1 |
27 apple |
複数のパターンを指定している場合、uniqコマンドの前にsortコマンドを通すことで、それぞれのパターンについて、出てきた数を数え上げることができます。
コマンド例
1 |
grep -o -eapple -eyuzu itemtext.txt | sort | uniq -c |
実行結果
1 2 |
27 apple 27 yuzu |
ファイル名を表示
(-Hオプション)
-Hオプションはパターンを検索したとき、パターンに一致した行と一緒にファイル名も一緒に表示します。
2つ以上のファイルに対して検索するとき、自動的にこのオプションはONになります。
コマンド例
1 |
grep -H apple itemtext.txt |
itemtext.txt ▼表示
実行結果
itemtext.txt:apple apple apple itemtext.txt:apple apple onion itemtext.txt:apple apple yuzu itemtext.txt:apple onion apple itemtext.txt:apple onion onion itemtext.txt:apple onion yuzu itemtext.txt:apple yuzu apple itemtext.txt:apple yuzu onion itemtext.txt:apple yuzu yuzu itemtext.txt:onion apple apple itemtext.txt:onion apple onion itemtext.txt:onion apple yuzu itemtext.txt:onion onion apple itemtext.txt:onion yuzu apple itemtext.txt:yuzu apple apple itemtext.txt:yuzu apple onion itemtext.txt:yuzu apple yuzu itemtext.txt:yuzu onion apple itemtext.txt:yuzu yuzu apple
ファイル名を表示しない
(-hオプション)
-hオプションはパターンに一致した行に対して、ファイル名を非表示にします。
ここでitemtext2.txtはitemtext.txtのコピーです。
通常、2つ以上のファイルに対して、grepコマンドを行うとパターンに一致した行と一緒にファイル名も表示されます。
しかし、-hオプションをつけることで、ファイル名を非表示にできます。
コマンド例
1 |
grep -h "apple apple apple" itemtext.txt itemtext2.txt |
itemtext.txt ▼表示
実行結果
1 2 |
apple apple apple apple apple apple |
標準入力に渡されたものにラベルをつける
(--labelオプション)
--labelオプションは、標準入力から来た文字列に対して、ファイル名があるかのようにラベルをつけることができます。
まずは、標準入力でgrepコマンドに-Hオプションをつけて渡された時の出力を見ます。
コマンド例
1 |
cat itemtext.txt | grep -H "apple apple apple" |
itemtext.txt ▼表示
実行結果
1 |
(standard input):apple apple apple |
この(standard input)に対して、別の名前を付けることができます。
それは、--labelというオプションでできます。
コマンド例
1 |
cat itemtext.txt | grep -H --label=foo "apple apple apple" |
実行結果
1 |
foo:apple apple apple |
grepで検索したパターンをファイルにどんどん追記していくときにラベルをつけておくと、どういう意図の出力された文字列かがわかるかもしれません。
パターンにマッチした部分の行番号を表示
(-nオプション)
-nオプションは、パターンに一致した部分の行番号を表示します。
コマンド例
1 |
grep -n apple itemtext.txt |
itemtext.txt ▼表示
実行結果
1:apple apple apple 2:apple apple onion 3:apple apple yuzu 4:apple onion apple 5:apple onion onion 6:apple onion yuzu 7:apple yuzu apple 8:apple yuzu onion 9:apple yuzu yuzu 10:onion apple apple 11:onion apple onion 12:onion apple yuzu 13:onion onion apple 16:onion yuzu apple 19:yuzu apple apple 20:yuzu apple onion 21:yuzu apple yuzu 22:yuzu onion apple 25:yuzu yuzu apple
-Hオプションと併用するとファイル名も表示することができます。
これでどのファイルのどの行がパターンに一致したかを把握することができます。
コマンド例
1 |
grep -H -n apple itemtext.txt |
実行結果
itemtext.txt:1:apple apple apple itemtext.txt:2:apple apple onion itemtext.txt:3:apple apple yuzu itemtext.txt:4:apple onion apple itemtext.txt:5:apple onion onion itemtext.txt:6:apple onion yuzu itemtext.txt:7:apple yuzu apple itemtext.txt:8:apple yuzu onion itemtext.txt:9:apple yuzu yuzu itemtext.txt:10:onion apple apple itemtext.txt:11:onion apple onion itemtext.txt:12:onion apple yuzu itemtext.txt:13:onion onion apple itemtext.txt:16:onion yuzu apple itemtext.txt:19:yuzu apple apple itemtext.txt:20:yuzu apple onion itemtext.txt:21:yuzu apple yuzu itemtext.txt:22:yuzu onion apple itemtext.txt:25:yuzu yuzu apple
パターンにマッチしているファイルを検索
(-lオプション)
lオプションは、パターンの後にファイル名を指定することでパターンにマッチした行ではなく、ファイルの名前を表示してくれます。
コマンド例
1 |
grep -l apple * |
または
1 |
grep -l apple dir1 empty.txt itemtext.txt itemtext2.txt |
ディレクトリ構造
1 2 3 4 5 6 7 |
. ├── dir1 │ ├── empty-dir1.txt │ └── itemtext-dir1.txt ├── empty.txt ├── itemtext.txt └── itemtext2.txt |
.(ドット)はカレントディレクトリです。
itemtext2.txtとitemtext-dir1.txtは、itemtext.txtのコピーになります。
また、empty.txtとempty-dir1.txtは何も書かれていないファイルとなります。
実行結果
1 2 3 |
grep: dir1: Is a directory itemtext.txt itemtext2.txt |
コマンド例
1 |
grep -l -s apple * |
または
1 |
grep -ls apple * |
実行結果
1 2 |
itemtext.txt itemtext2.txt |
再帰的にパターンにマッチしているファイルを検索
(-rオプションと-lオプション)
-rオプションは、ファイルの代わりにディレクトリを指定して、再帰的にそれぞれのファイルに対して検索を行っていくオプションです。
コマンド例
1 |
grep -l -r apple . |
または
1 |
grep -lr apple . |
ディレクトリ構造 ▼表示
実行結果
1 2 3 |
./dir1/itemtext-dir1.txt ./itemtext2.txt ./itemtext.txt |
ディレクトリを指定しなければ、現在のディレクトリから再帰的に検索していきます。
コマンド例
1 |
grep -lr apple |
実行結果
1 2 3 |
dir1/itemtext-dir1.txt itemtext2.txt itemtext.txt |
再帰的にファイルに対してパターンにマッチした行を検索
(-rオプション)
-rオプションは、ファイルの代わりにディレクトリを指定して、再帰的にそれぞれのファイルに対して検索を行っていくオプションです。
ディレクトリを指定しなければ、現在のディレクトリから再帰的に検索していきます。
コマンド例
1 |
grep -r apple . |
itemtext.txt ▼表示
ディレクトリ構造 ▼表示
実行結果
./dir1/itemtext-dir1.txt:apple apple apple ./dir1/itemtext-dir1.txt:apple apple onion ./dir1/itemtext-dir1.txt:apple apple yuzu ./dir1/itemtext-dir1.txt:apple onion apple ./dir1/itemtext-dir1.txt:apple onion onion ./dir1/itemtext-dir1.txt:apple onion yuzu ./dir1/itemtext-dir1.txt:apple yuzu apple ./dir1/itemtext-dir1.txt:apple yuzu onion ./dir1/itemtext-dir1.txt:apple yuzu yuzu ./dir1/itemtext-dir1.txt:onion apple apple ./dir1/itemtext-dir1.txt:onion apple onion ./dir1/itemtext-dir1.txt:onion apple yuzu ./dir1/itemtext-dir1.txt:onion onion apple ./dir1/itemtext-dir1.txt:onion yuzu apple ./dir1/itemtext-dir1.txt:yuzu apple apple ./dir1/itemtext-dir1.txt:yuzu apple onion ./dir1/itemtext-dir1.txt:yuzu apple yuzu ./dir1/itemtext-dir1.txt:yuzu onion apple ./dir1/itemtext-dir1.txt:yuzu yuzu apple ./itemtext2.txt:apple apple apple ./itemtext2.txt:apple apple onion ./itemtext2.txt:apple apple yuzu ./itemtext2.txt:apple onion apple ./itemtext2.txt:apple onion onion ./itemtext2.txt:apple onion yuzu ./itemtext2.txt:apple yuzu apple ./itemtext2.txt:apple yuzu onion ./itemtext2.txt:apple yuzu yuzu ./itemtext2.txt:onion apple apple ./itemtext2.txt:onion apple onion ./itemtext2.txt:onion apple yuzu ./itemtext2.txt:onion onion apple ./itemtext2.txt:onion yuzu apple ./itemtext2.txt:yuzu apple apple ./itemtext2.txt:yuzu apple onion ./itemtext2.txt:yuzu apple yuzu ./itemtext2.txt:yuzu onion apple ./itemtext2.txt:yuzu yuzu apple ./itemtext.txt:apple apple apple ./itemtext.txt:apple apple onion ./itemtext.txt:apple apple yuzu ./itemtext.txt:apple onion apple ./itemtext.txt:apple onion onion ./itemtext.txt:apple onion yuzu ./itemtext.txt:apple yuzu apple ./itemtext.txt:apple yuzu onion ./itemtext.txt:apple yuzu yuzu ./itemtext.txt:onion apple apple ./itemtext.txt:onion apple onion ./itemtext.txt:onion apple yuzu ./itemtext.txt:onion onion apple ./itemtext.txt:onion yuzu apple ./itemtext.txt:yuzu apple apple ./itemtext.txt:yuzu apple onion ./itemtext.txt:yuzu apple yuzu ./itemtext.txt:yuzu onion apple ./itemtext.txt:yuzu yuzu apple
ディレクトリを複数指定した場合は、入力した順番のディレクトリでファイルを再帰的に実行していきます。
コマンド例
1 |
grep -r apple . dir1/ |
実行結果
./dir1/itemtext-dir1.txt:apple apple apple ./dir1/itemtext-dir1.txt:apple apple onion ./dir1/itemtext-dir1.txt:apple apple yuzu ./dir1/itemtext-dir1.txt:apple onion apple ./dir1/itemtext-dir1.txt:apple onion onion ./dir1/itemtext-dir1.txt:apple onion yuzu ./dir1/itemtext-dir1.txt:apple yuzu apple ./dir1/itemtext-dir1.txt:apple yuzu onion ./dir1/itemtext-dir1.txt:apple yuzu yuzu ./dir1/itemtext-dir1.txt:onion apple apple ./dir1/itemtext-dir1.txt:onion apple onion ./dir1/itemtext-dir1.txt:onion apple yuzu ./dir1/itemtext-dir1.txt:onion onion apple ./dir1/itemtext-dir1.txt:onion yuzu apple ./dir1/itemtext-dir1.txt:yuzu apple apple ./dir1/itemtext-dir1.txt:yuzu apple onion ./dir1/itemtext-dir1.txt:yuzu apple yuzu ./dir1/itemtext-dir1.txt:yuzu onion apple ./dir1/itemtext-dir1.txt:yuzu yuzu apple ./itemtext2.txt:apple apple apple ./itemtext2.txt:apple apple onion ./itemtext2.txt:apple apple yuzu ./itemtext2.txt:apple onion apple ./itemtext2.txt:apple onion onion ./itemtext2.txt:apple onion yuzu ./itemtext2.txt:apple yuzu apple ./itemtext2.txt:apple yuzu onion ./itemtext2.txt:apple yuzu yuzu ./itemtext2.txt:onion apple apple ./itemtext2.txt:onion apple onion ./itemtext2.txt:onion apple yuzu ./itemtext2.txt:onion onion apple ./itemtext2.txt:onion yuzu apple ./itemtext2.txt:yuzu apple apple ./itemtext2.txt:yuzu apple onion ./itemtext2.txt:yuzu apple yuzu ./itemtext2.txt:yuzu onion apple ./itemtext2.txt:yuzu yuzu apple ./itemtext.txt:apple apple apple ./itemtext.txt:apple apple onion ./itemtext.txt:apple apple yuzu ./itemtext.txt:apple onion apple ./itemtext.txt:apple onion onion ./itemtext.txt:apple onion yuzu ./itemtext.txt:apple yuzu apple ./itemtext.txt:apple yuzu onion ./itemtext.txt:apple yuzu yuzu ./itemtext.txt:onion apple apple ./itemtext.txt:onion apple onion ./itemtext.txt:onion apple yuzu ./itemtext.txt:onion onion apple ./itemtext.txt:onion yuzu apple ./itemtext.txt:yuzu apple apple ./itemtext.txt:yuzu apple onion ./itemtext.txt:yuzu apple yuzu ./itemtext.txt:yuzu onion apple ./itemtext.txt:yuzu yuzu apple dir1/itemtext-dir1.txt:apple apple apple dir1/itemtext-dir1.txt:apple apple onion dir1/itemtext-dir1.txt:apple apple yuzu dir1/itemtext-dir1.txt:apple onion apple dir1/itemtext-dir1.txt:apple onion onion dir1/itemtext-dir1.txt:apple onion yuzu dir1/itemtext-dir1.txt:apple yuzu apple dir1/itemtext-dir1.txt:apple yuzu onion dir1/itemtext-dir1.txt:apple yuzu yuzu dir1/itemtext-dir1.txt:onion apple apple dir1/itemtext-dir1.txt:onion apple onion dir1/itemtext-dir1.txt:onion apple yuzu dir1/itemtext-dir1.txt:onion onion apple dir1/itemtext-dir1.txt:onion yuzu apple dir1/itemtext-dir1.txt:yuzu apple apple dir1/itemtext-dir1.txt:yuzu apple onion dir1/itemtext-dir1.txt:yuzu apple yuzu dir1/itemtext-dir1.txt:yuzu onion apple dir1/itemtext-dir1.txt:yuzu yuzu apple
この例ではdir1を繰り返して、検索していますが実際に利用する際はこのような指定はしないと思います。
再帰的な検索から検索項目を除外
(--excludeオプション)
(--exclude-fromオプション)
(--exclude-dirオプション)
--excludeオプション
--excludeオプションは、検索から除外するファイルを指定します。指定するファイルについてはワイルドカードを使用できます。*.txtですべてのテキストファイルを検索から除外します。今回の例では出力は表示されません。
コマンド例
1 |
grep -r --exclude=*.txt apple |
ディレクトリ構造 ▼表示
実行結果 なし
もし、itemtext.txtのコピーであるitemtext.datがあるならば、このコマンド例は以下のような実行結果になります。
1 2 |
cp itemtext.txt itemtext.dat grep -r --exclude=*.txt apple |
実行結果 ▼表示
'{}'で複数のリストを指定することもできます。
1 |
grep -r --exlude=*.{txt,dat} |
この指定方法は
1 |
grep -r --exclude=*.txt --exclude=*.dat apple |
と等価なコマンドになります。
これはすべてのテキストファイルとすべてのデータファイルを除外することができます。
--exclude-fromオプション
--excludeオプションで除外するファイルは別のファイルにすることができます。
--exclude-fromオプションは、--excludeオプションで除外するファイルを別のファイルに書き込んで置き、そのファイルを読み込んで検索から除外することができます。
コマンド例
1 |
grep -r --exclude-from=exclude-file.txt apple |
exclude-file.txt
1 2 |
*.txt *.dat |
ディレクトリ構造 ▼表示
実行結果 なし
--exclude-dirオプション
--exclude-dirオプションは検索から除外できるディレクトリを指定することができます。
ワイルドカードを用いた指定もできます。
コマンド例
1 |
grep -r --exclude-dir=dir1 apple |
ディレクトリ構造 ▼表示
実行結果 ▼表示
指定のファイルのみを検索
(--includeオプション)
--includeオプションは指定したファイルだけを検索します。
*.txtですべてのテキストファイルだけを検索します。
--excludeオプションと同じようにワイルドカードを用いて指定することができます。
コマンド例
1 |
grep -r --include=*.txt apple |
ディレクトリ構造 ▼表示
実行結果
dir1/itemtext-dir1.txt:apple apple apple dir1/itemtext-dir1.txt:apple apple onion dir1/itemtext-dir1.txt:apple apple yuzu dir1/itemtext-dir1.txt:apple onion apple dir1/itemtext-dir1.txt:apple onion onion dir1/itemtext-dir1.txt:apple onion yuzu dir1/itemtext-dir1.txt:apple yuzu apple dir1/itemtext-dir1.txt:apple yuzu onion dir1/itemtext-dir1.txt:apple yuzu yuzu dir1/itemtext-dir1.txt:onion apple apple dir1/itemtext-dir1.txt:onion apple onion dir1/itemtext-dir1.txt:onion apple yuzu dir1/itemtext-dir1.txt:onion onion apple dir1/itemtext-dir1.txt:onion yuzu apple dir1/itemtext-dir1.txt:yuzu apple apple dir1/itemtext-dir1.txt:yuzu apple onion dir1/itemtext-dir1.txt:yuzu apple yuzu dir1/itemtext-dir1.txt:yuzu onion apple dir1/itemtext-dir1.txt:yuzu yuzu apple itemtext2.txt:apple apple apple itemtext2.txt:apple apple onion itemtext2.txt:apple apple yuzu itemtext2.txt:apple onion apple itemtext2.txt:apple onion onion itemtext2.txt:apple onion yuzu itemtext2.txt:apple yuzu apple itemtext2.txt:apple yuzu onion itemtext2.txt:apple yuzu yuzu itemtext2.txt:onion apple apple itemtext2.txt:onion apple onion itemtext2.txt:onion apple yuzu itemtext2.txt:onion onion apple itemtext2.txt:onion yuzu apple itemtext2.txt:yuzu apple apple itemtext2.txt:yuzu apple onion itemtext2.txt:yuzu apple yuzu itemtext2.txt:yuzu onion apple itemtext2.txt:yuzu yuzu apple itemtext.txt:apple apple apple itemtext.txt:apple apple onion itemtext.txt:apple apple yuzu itemtext.txt:apple onion apple itemtext.txt:apple onion onion itemtext.txt:apple onion yuzu itemtext.txt:apple yuzu apple itemtext.txt:apple yuzu onion itemtext.txt:apple yuzu yuzu itemtext.txt:onion apple apple itemtext.txt:onion apple onion itemtext.txt:onion apple yuzu itemtext.txt:onion onion apple itemtext.txt:onion yuzu apple itemtext.txt:yuzu apple apple itemtext.txt:yuzu apple onion itemtext.txt:yuzu apple yuzu itemtext.txt:yuzu onion apple itemtext.txt:yuzu yuzu apple
シンボリックリンクのディレクトリも再帰検索
(-Rオプション)
-Rオプションはシンボリックリンクの先のディレクトリやファイルも再帰検索するオプションです。通常の-rオプションではシンボリックリンクの先までは再帰検索を行いません。
-Rオプションで検索の除外をする際、-rオプションと扱いは同じになり、シンボリックリンクの先がディレクトリの場合は--exclude-dirオプションで、シンボリックリンクの先がファイルの場合は--excludeで除外することができます。
コマンド例
1 |
grep -R apple |
ディレクトリ構造 ▼表示
実行結果
dir1/itemtext-dir1.txt:apple apple apple dir1/itemtext-dir1.txt:apple apple onion dir1/itemtext-dir1.txt:apple apple yuzu dir1/itemtext-dir1.txt:apple onion apple dir1/itemtext-dir1.txt:apple onion onion dir1/itemtext-dir1.txt:apple onion yuzu dir1/itemtext-dir1.txt:apple yuzu apple dir1/itemtext-dir1.txt:apple yuzu onion dir1/itemtext-dir1.txt:apple yuzu yuzu dir1/itemtext-dir1.txt:onion apple apple dir1/itemtext-dir1.txt:onion apple onion dir1/itemtext-dir1.txt:onion apple yuzu dir1/itemtext-dir1.txt:onion onion apple dir1/itemtext-dir1.txt:onion yuzu apple dir1/itemtext-dir1.txt:yuzu apple apple dir1/itemtext-dir1.txt:yuzu apple onion dir1/itemtext-dir1.txt:yuzu apple yuzu dir1/itemtext-dir1.txt:yuzu onion apple dir1/itemtext-dir1.txt:yuzu yuzu apple dir1_sym/itemtext-dir1.txt:apple apple apple dir1_sym/itemtext-dir1.txt:apple apple onion dir1_sym/itemtext-dir1.txt:apple apple yuzu dir1_sym/itemtext-dir1.txt:apple onion apple dir1_sym/itemtext-dir1.txt:apple onion onion dir1_sym/itemtext-dir1.txt:apple onion yuzu dir1_sym/itemtext-dir1.txt:apple yuzu apple dir1_sym/itemtext-dir1.txt:apple yuzu onion dir1_sym/itemtext-dir1.txt:apple yuzu yuzu dir1_sym/itemtext-dir1.txt:onion apple apple dir1_sym/itemtext-dir1.txt:onion apple onion dir1_sym/itemtext-dir1.txt:onion apple yuzu dir1_sym/itemtext-dir1.txt:onion onion apple dir1_sym/itemtext-dir1.txt:onion yuzu apple dir1_sym/itemtext-dir1.txt:yuzu apple apple dir1_sym/itemtext-dir1.txt:yuzu apple onion dir1_sym/itemtext-dir1.txt:yuzu apple yuzu dir1_sym/itemtext-dir1.txt:yuzu onion apple dir1_sym/itemtext-dir1.txt:yuzu yuzu apple itemtext2.txt:apple apple apple itemtext2.txt:apple apple onion itemtext2.txt:apple apple yuzu itemtext2.txt:apple onion apple itemtext2.txt:apple onion onion itemtext2.txt:apple onion yuzu itemtext2.txt:apple yuzu apple itemtext2.txt:apple yuzu onion itemtext2.txt:apple yuzu yuzu itemtext2.txt:onion apple apple itemtext2.txt:onion apple onion itemtext2.txt:onion apple yuzu itemtext2.txt:onion onion apple itemtext2.txt:onion yuzu apple itemtext2.txt:yuzu apple apple itemtext2.txt:yuzu apple onion itemtext2.txt:yuzu apple yuzu itemtext2.txt:yuzu onion apple itemtext2.txt:yuzu yuzu apple itemtext.txt:apple apple apple itemtext.txt:apple apple onion itemtext.txt:apple apple yuzu itemtext.txt:apple onion apple itemtext.txt:apple onion onion itemtext.txt:apple onion yuzu itemtext.txt:apple yuzu apple itemtext.txt:apple yuzu onion itemtext.txt:apple yuzu yuzu itemtext.txt:onion apple apple itemtext.txt:onion apple onion itemtext.txt:onion apple yuzu itemtext.txt:onion onion apple itemtext.txt:onion yuzu apple itemtext.txt:yuzu apple apple itemtext.txt:yuzu apple onion itemtext.txt:yuzu apple yuzu itemtext.txt:yuzu onion apple itemtext.txt:yuzu yuzu apple itemtext_sym.txt:apple apple apple itemtext_sym.txt:apple apple onion itemtext_sym.txt:apple apple yuzu itemtext_sym.txt:apple onion apple itemtext_sym.txt:apple onion onion itemtext_sym.txt:apple onion yuzu itemtext_sym.txt:apple yuzu apple itemtext_sym.txt:apple yuzu onion itemtext_sym.txt:apple yuzu yuzu itemtext_sym.txt:onion apple apple itemtext_sym.txt:onion apple onion itemtext_sym.txt:onion apple yuzu itemtext_sym.txt:onion onion apple itemtext_sym.txt:onion yuzu apple itemtext_sym.txt:yuzu apple apple itemtext_sym.txt:yuzu apple onion itemtext_sym.txt:yuzu apple yuzu itemtext_sym.txt:yuzu onion apple itemtext_sym.txt:yuzu yuzu apple
この例ではあらかじめシンボリックリンクを準備しています。
dir1のシンボリックリンクのディレクトリはdir1_symです。
itemtext.txtのシンボリックリンクのファイルはitemtext_sym.txtです。
シンボリックリンクの作成コマンドはそれぞれ
1 |
ln -s <dir1の絶対パス> dir1_sym |
1 |
ln -s <itemtext.txtの絶対パス> itemtext_sym.txt |
になります。
絶対パスの確認コマンドは
1 |
readlink -f ファイルまたはディレクトリ |
または
1 |
realpath ファイルまたはディレクトリ |
になります。
パターンにマッチした行の後ろのn行を表示
(-Aオプション)
-Aオプションはパターンマッチングした行の後ろの行も表示することができます。
何行を表示するかは-Aオプションの後の数字で指定します。
この例では、3を指定したことでパターンマッチした行の後ろ3行分表示しています。
コマンド例
1 |
grep -A 3 "onion onion onion" itemtext.txt |
itemtext.txt ▼表示
実行結果
1 2 3 4 |
onion onion onion onion onion yuzu onion yuzu apple onion yuzu onion |
-Aオプションが設定されていても、grepコマンドは表示する行を何度も繰り返しません。
コマンド例
1 |
grep -A 1 "apple" itemtext.txt |
実行結果
apple apple apple apple apple onion apple apple yuzu apple onion apple apple onion onion apple onion yuzu apple yuzu apple apple yuzu onion apple yuzu yuzu onion apple apple onion apple onion onion apple yuzu onion onion apple onion onion onion -- onion yuzu apple onion yuzu onion -- yuzu apple apple yuzu apple onion yuzu apple yuzu yuzu onion apple yuzu onion onion -- yuzu yuzu apple yuzu yuzu onion
パターンにマッチした行の前からn行を表示
(-Bオプション)
-Bオプションはパターンマッチングした行の前の行を表示することができます。
何行を表示するかは-Bオプションの後の数字で指定します。
この例では、3を指定したことでパターンマッチした行の前3行分表示しています。
コマンド例
1 |
grep -B 3 "onion onion onion" itemtext.txt |
itemtext.txt ▼表示
実行結果
1 2 3 4 |
onion apple onion onion apple yuzu onion onion apple onion onion onion |
パターンにマッチした行の前後n行を表示
(-Cオプション)
-Cオプションはパターンマッチングした行の前後の行を表示することができます。
何行を表示するかは-Cオプションの後の数字で指定します。
この例では、3を指定したことでパターンマッチした行の前後3行分表示しています。
コマンド例
1 |
grep -C 3 "onion onion onion" itemtext.txt |
itemtext.txt ▼表示
実行結果
1 2 3 4 5 6 7 |
onion apple onion onion apple yuzu onion onion apple onion onion onion onion onion yuzu onion yuzu apple onion yuzu onion |
前後に表示した時の行の区切り文字を変更
(--group-separator=string)
--group-separatorオプションは、-A,-B,-Cオプションの時に、パターンマッチした行の前後の表示で使われていた区切り文字を任意の文字列で変更することができます。
コマンド例
1 |
grep -A 1 --group-separator="*****separator*****" "apple" itemtext.txt |
itemtext.txt ▼表示
実行結果
apple apple apple apple apple onion apple apple yuzu apple onion apple apple onion onion apple onion yuzu apple yuzu apple apple yuzu onion apple yuzu yuzu onion apple apple onion apple onion onion apple yuzu onion onion apple onion onion onion *****separator***** onion yuzu apple onion yuzu onion *****separator***** yuzu apple apple yuzu apple onion yuzu apple yuzu yuzu onion apple yuzu onion onion *****separator***** yuzu yuzu apple yuzu yuzu onion
前後に表示したときの行の区切り文字を表示しない
(--no-group-separator)
--no-group-separatorオプションは、-A,-B,-Cオプションの時に、パターンマッチした行の前後の表示で使われていた区切り文字を表示しないようにすることができます。
コマンド例
1 |
grep -A 1 --no-group-separator "apple" itemtext.txt |
itemtext.txt ▼表示
実行結果
apple apple apple apple apple onion apple apple yuzu apple onion apple apple onion onion apple onion yuzu apple yuzu apple apple yuzu onion apple yuzu yuzu onion apple apple onion apple onion onion apple yuzu onion onion apple onion onion onion onion yuzu apple onion yuzu onion yuzu apple apple yuzu apple onion yuzu apple yuzu yuzu onion apple yuzu onion onion yuzu yuzu apple yuzu yuzu onion
参考
外部リンクGNU grepのマニュアル