cha_pppo blog

i have an unbeknown dictionary. everything is up to me.

Linux grep memo

grepと関係の無いものまで混ぜている。

Options

  • -e 一致処理に指定した正規表現を使用
  • -E 拡張正規表現
  • -i 大文字と小文字の区別無し
  • -v 除外して検索
  • -n 行番号を表示
  • -l ファイル名のみ表示
  • -h ファイル名非表示
  • -o 一致した文字を表示
  • -C 一致した箇所から前後に指定した行数を表示
# `test` の前後10行を取得する。
cat ~/path/to/file | grep "test" -C 10

# process ID取得
pgrep -fl nginx
pgrep -fl httpd

# 件数表示
grep -rl "xxx" * | wc -l
grep -rl "xxx" * | grep "xxx" | wc -l

# 前後3行出力
grep -3 -ri file *

# 後ろ[前]3行も出力
grep -A[B] 3 -ri file *

# count
grep -c "keyword" xxx*.csv

# ログ検索
grep -c "\-1 " ./*
grep -c "0\.000 50[0-4] " ./*
cat ./*.log | awk {'print $3'} | awk -F":" {'print $1'} | sort | uniq -c
grep "failed to upload" error.log -b 10 -a 10

# gz ファイル内を検索
gzrep "/s" xxx.com.log.gz
zgrep "/s" xxx.com.log.gz
zgrep " " xxx.com.log.gz | tail -n 20

# process tree 表示
ps axf | grep [p]ostgres
ps auxwf|egrep "^postgres|^USER"
pstree -hpal

除外

特定のファイルやディレクトリを除外してgrep

# 特定のfileを除外してfile内文字列をgrep
grep -e "xxx" --exclude=yyy -ri /path/
/path/xxx.py:    xxx

# 特定directory, fileを除外してfile内文字列をgrep
grep -rl "xxx" ./ --exclude-dir=prod
./xxx.tf

# 特定のdirectory, fileを複数除外してgrep
grep -rl[i] --exclude={\*git\*,terraform\*} xxx .
./xxx/111.tf
./xxx/222.tf
./xxx/333.tf

# 特定のdirectory, fileを除外してgrep
find . -type f | grep -vE /.git/ - | xargs grep xxx
./xxx/111.tf:                "aaaa_xxx": {
./xxx/222.tf:                    "bbb_xxx",

# 該当file以外削除
ls | grep -vE 'xxx.php' | xargs rm -r