grepコマンド
正規表現でマッチする行を検索するコマンド
構文
grep [オプション] パターン [ファイル]
ex: grep -n abc aaa.txt
重要度
★★★★★(5/5)
必須。これを覚えていないと普段の業務に支障が出るレベル。
オプションたち
覚えたいオプション
- -e : 正規表現を使う(regexのe?)
- -n : 検索結果に行番号を表示する(number。よくある省略)
- -C5 : 検索結果に一致した箇所から前後に指定した5行表示する(行数は任意。多分Cに意味はない、A,B,Cでそれぞれ一致した前、あと、前後なので、ABCどれかだなと覚えればよいかも)
- -r : ディレクトリ内も検索対象とする(recursive。よくある省略)
- -i : 大文字と小文字を区別せず検索する(case insensitiveのi。多分。。。)
できれば覚えたいオプション
- -v : 一致しないもの
- -B3 : 一致した前3行を表示する(数は任意の数字)
- -A2 : 一致した後2行を表示する(数は任意の数字)
覚えなくてもよさそうなオプション(ひとそれぞれですが)
- -E : 拡張正規表現で検索を行う
- -l : 検索結果にファイル名のみ表示する
- -h : 検索結果にファイル名を表示しない
- -o : 検索結果に一致した文字を表示する
- -L : 該当しないファイルを表示する
サンプル
- grep '^A' sample.csv → 行の頭にAがついている
- grep '[0-9]' sample.csv → '[0-9]'の文字列が含まれている行を抽出
- ps aux | grep python → pythonという文字が含まれているプロセスを抽出
- grep -v '^A' sample.csv → 行の頭にAがついていない
- grep -e aaa -e bbb sample.csv → aaaとbbbどちらかが含まれる行を抽出
- grep -i aaa sample.csv → 大文字小文字を区別せず、aaaが含まれる行を抽出
appendix
grepでAND検索したい場合
grep aaa sample.csv | grep bbb
→ aaaが含まれているものに絞って、さらにbbbが含まれているものに絞る
grepでOR検索したい場合
grep -e aaa-e bbb sample.csv
→ -eオプションを複数回繰り返す。aaaを含む行とbbbを含む行を取り出す。
特定のファイル名のものを抽出したい
ls ./ | grep aaa
→カレントディレクトリ(現在のディレクトリ)にあるaaa(ファイル名)を含むファイルを抽出。
特定の内容を含むファイルを抽出したい
grep aaa -rl ./
→カレントディレクトリ(現在のディレクトリ)にあるファイルの中身にaaaが含まれるもの
実行したコマンドの履歴から特定の文字列を含む直近のコマンドを調べたい
history | grep aaa | tail
→ヒストリーコマンドからaaaを含むコマンドを抽出。tailで最後の5つに絞り込む。
まとめ
grepコマンドは必須なので、しっかり覚えておくことをおすすめします!