🔎
grepの便利な使い方メモ
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