Memo/Linux/grep

https://dexlab.net:443/pukiwiki/index.php?Memo/Linux/grep
 

grep/egrep/fgrep

カラーリング

  • --color=auto: 一致した文字列に色が付く
  • --with-filename: ファイル名を出力
  • --line-number: 行番号を出力
alias grep="grep --color=auto"

2つのテキストファイルの共通行だけ抽出

cat file1
aaa
bbb

cat file2
bbb
ccc

grep -x -i -f file1 file2
bbb

grepで正規表現にマッチした部分だけを抽出

  • grep v2.5以上の「-o」オプションでマッチした部分だけを抽出
    LANG=C ifconfig | grep -o -e "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | sed -n "1p"
  • grep v2.5以上の「-P」オプションでPerl互換の正規表現
    LANG=C ifconfig | grep -o -P "\d+\.\d+\.\d+\.\d+" | sed -n "1p"
  • egrepも同様
    LANG=C ifconfig | egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | sed -n "1p"

grepの使い方

  • デフォルトオプションを付与。~/.bash_profile あたりに追加すれば次回ログインから有効
    export GREP_OPTIONS="--color=auto"
  • 例えば /tmp 以下にあるたくさんのファイルの中から "Linux" という文字を含むファイルを見つけ出したいとき
    grep "Linux" /tmp/*
    これで結果がずらずらと出てきます。
    でもこれだと"linux"を含む文字列全てが対象となってしまいます。
  • 単語の完全一致で検索したいときは
    grep -w "Linux" /tmp/*
  • 大文字と小文字の区別をなくしたいときは
    grep -i "Linux" /tmp/*
  • サブディレクトリ以下も再帰的に検索したい場合
    grep -r "Linux" /tmp/*
  • マッチした1行前も表示
    grep -B 1 hoge
  • マッチした1行後も表示
    grep -A 1 hoge
  • 指定した文字を含まないファイルを表示
    grep -L hoge /tmp/*.txt

grepやwcが遅い場合

マルチランゲージ対応版だと遅くなるようだ。日本語検索してなくてよいなら、 以下のように、LANG=Cにすることで数十倍早く実行できる。

export LANG=C

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-01 (月) 17:17:29 (22d)