🔎

grepの便利な使い方メモ

2021/01/16に公開

grepの便利な使い方メモ

  • ログ調査などでgrepを使って絞り込みをする際にエラーが発生した行の前後も確認したい。
  • ざっくり絞りこんでいく際に、特定のディレクトリを除いて全部検索したい。
  • 日本語のみを抽出したい (2021/03/27追記)

環境

  • bash
    • GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
  • grep
    • grep (BSD grep) 2.5.1-FreeBSD
  • macOS
    • Catalina Version 10.15.7

サンプルファイル、フォルダ

MacBook-Pro:memo captain-blue$ tree sandbox/
sandbox/
├── dummy
│   └── sample.txt
└── sample.txt
sample.txt
test1
test2
test3
テスト
test4
日本語
test5
test6
てすと

※ sandbox直下とdummyフォルダ直下のsample.txtの中身は同じ


一致した行の前後も表示したい

grep -C 1 test3 sample.txt

-Cオプションのあとに半角スペースを空けて、前後に表示したい行数を指定する。

⬇️

MacBook-Pro:sandbox captain-blue$ grep -C 1 test3 sample.txt
test2
test3
test4

test3の前後1行も表示された。

一致した後ろのn行も表示したい

grep -A 3 test4 sample.txt

-Aオプション(Afterっぽい)のあとに半角スペースを空けて、表示したいうしろのn行を指定する

⬇️

MacBook-Pro:sandbox captain-blue$ grep -A 3 test4 sample.txt
test4
test5
test6

指定しない場合

MacBook-Pro:sandbox captain-blue$ grep test3 sample.txt
test3

test3のみ表示される


特定のディレクトリを除外したい

grep -r --exclude-dir dummy test3 .

-r・・・サブディレクトリも含めて検索
--exclude-dir・・・除外したいディレクトリを半角スペースを空けて指定

⬇️

MacBook-Pro:sandbox captain-blue$ grep -r --exclude-dir dummy test3 .
./sample.txt:test3

sandbox直下のtest3のみ表示される

指定しない場合

MacBook-Pro:sandbox captain-blue$ grep -r test3 .
./dummy/sample.txt:test3
./sample.txt:test3

dummyフォルダ配下にあるファイルも対象となっている


日本語のみを抽出したい

grep -rohE "[ぁ-んァ-ン亜-熙 -】]+" ./*

-o・・・一致した箇所のみ表示
-h・・・ファイル名を非表示にする
-E・・・拡張正規表現を使う場合に指定する。ここでは+を使うために指定してます

正規表現の簡単な解説
[ぁ-ん]・・・ひらがな
[ァ-ン]・・・カタカナ
[亜-熙]・・・漢字
[ -】]・・・句読点等

⬇️

MacBook-Pro:sandbox captain-blue$ grep -rohE "[ぁ-んァ-ン亜-熙 -】]+" ./*
ボタン
テスト
日本語
てすと
テスト
日本語
てすと

参考

Discussion