grepコマンドについてのメモ書き。
■基本
grep 文字列 ファイル名
■
grep '^hoge$' hoge2.txt hoge3.txt
⇒hoge2.txt,hoge3.txtからhogeからなる行を検索する。
grep 'hoge' *
⇒同じディレクトリ階層にあるファイル内からhogeを検索する。
■サブディレクトリ内のファイルも含めて検索する。
grep -r 'hoge' *
grep -r 'hoge' .
⇒同じディレクトリ階層とそのサブディレクトリにあるファイル内からhogeを検索する。
> find hogeDir/ -type f -print | xargs grep 'hoge' .
> find hogeDir/ -type f -print | xargs grep 'hoge'
> find hogeDir/ -type f -print | xargs grep 'hoge' /dev/null
⇒同じディレクトリ階層にあるhogeDirディレクトリ内にあるファイルから、hogeを検索する。
> find . -type f -print | xargs grep 'hoge'
> find . -type f -print | xargs grep 'hoge' .
> find . -type f -print | xargs grep 'hoge' /dev/null
⇒同じディレクトリ階層とそのサブディレクトリ内にあるファイルから、hogeを検索する。findとの組み合わせ。
⇒いまさらxargsの便利さを主張してみる
⇒find/grep/xargsコマンドを使いこなす
⇒wiki(xargs)
■
> grep ^$ hoge2.txt
⇒hoge2.txtから空行を探す。^は先頭、$は末尾を表すから。
> grep ^$ hoge2.txt | wc -l
⇒wcと組み合わせて空行の行数を出力する。
> grep -n ^$ hoge2.txt
-nで結果に行番号も表示できる。
> grep -v ^$ hoge2.txt
⇒hoge2.txtから空行を除いたすべての行を出力する。-vはinvert(反転)。規定した文字列を含まない行を検索するオプション。
> grep -v hoge tesed4.txt
⇒hogeを含まない行を出力する。すなわちhogeがある行を削除する。
■
> grep '^[ed]' hoge2.txt
⇒hoge2.txtから先頭文字がd,eの行を検索する。
> grep '^[c-e]' hoge2.txt
⇒hoge2.txtから先頭文字がc,d,eの行を検索する。
> grep '^[a-z]' hoge2.txt
⇒hoge2.txtから先頭文字がaからzの行を検索する。
■^について
> grep '^[^c-e]' hoge2.txt
⇒hoge2.txtから先頭文字がc,d,e以外の行を検索する。[]内の^は否定の意味を持つ。[]外の^は先頭の意味を持つ。
■オプション
-n:行番号を表示
-i:大文字小文字を区別しない。ignore-case,case sensitivie
-v:一致しなかった行を表示
■
.(どっと):任意の一文字。
文字*:文字の0回以上の繰り返し。
.*:任意の文字の0回以上の繰り返し。
.+:任意の文字の1回以上の繰り返し。egrepしか使えない。
?:0回か1回。egrep
> grep '^hoge. .*' hoge2.txt
hoge2.txtから先頭がhogeで始まり、hogeの後に任意の一文字があり、その後にスペースがあり、その後に任意の文字が0回以上繰り返される行を検索する。
■grep,fgrep
・egrepはgrepに似ている。grepは限られた正規表現しか使えないがegrepは全て使える。egrepだと+(1回以上の繰り返し)、?(0回か1回)が使える。
⇒grepに-Eオプションを付ければegrep
・fgrepは検索文字で正規表現が使えない。なので、.(どっと)も普通の文字として解釈される。また例として、「fgrep '^hoge' hoge2.txt」と「grep '^^hoge' hoge2.txt」は同じ。エスケープとかもない。
⇒grepに-Fオプションを付ければfgrep
・egrepは()カッコを使って文字列の繰り返しの検索もできる。下が例。
> egrep '^hoge4$' hoge2.txt
⇒hoge4のみの行を検索する。
> egrep '^(hoge4)+$' hoge2.txt
⇒hoge4が1回以上繰り返す行を検索する
> grep '^hoge4$' hoge2.txt
⇒hoge4のみの行を検索する。
> egrep '^(hoge4)+$' hoge2.txt
⇒使えない。
・egrepは|(棒)で論理和を使える。
> grep '(hoge2|hoge4)' hoge2.txt
⇒使えない
> egrep '(hoge2|hoge4)' hoge2.txt
⇒hoge2かhoge4を含む行を検索する。
> grep -E '(hoge2|hoge4)' hoge2.txt
⇒hoge2かhoge4を含む行を検索する。
参考
・linuxコマンド一覧
・grep
■基本
grep 文字列 ファイル名
■
grep '^hoge$' hoge2.txt hoge3.txt
⇒hoge2.txt,hoge3.txtからhogeからなる行を検索する。
grep 'hoge' *
⇒同じディレクトリ階層にあるファイル内からhogeを検索する。
■サブディレクトリ内のファイルも含めて検索する。
grep -r 'hoge' *
grep -r 'hoge' .
⇒同じディレクトリ階層とそのサブディレクトリにあるファイル内からhogeを検索する。
> find hogeDir/ -type f -print | xargs grep 'hoge' .
> find hogeDir/ -type f -print | xargs grep 'hoge'
> find hogeDir/ -type f -print | xargs grep 'hoge' /dev/null
⇒同じディレクトリ階層にあるhogeDirディレクトリ内にあるファイルから、hogeを検索する。
> find . -type f -print | xargs grep 'hoge'
> find . -type f -print | xargs grep 'hoge' .
> find . -type f -print | xargs grep 'hoge' /dev/null
⇒同じディレクトリ階層とそのサブディレクトリ内にあるファイルから、hogeを検索する。findとの組み合わせ。
⇒いまさらxargsの便利さを主張してみる
⇒find/grep/xargsコマンドを使いこなす
⇒wiki(xargs)
■
> grep ^$ hoge2.txt
⇒hoge2.txtから空行を探す。^は先頭、$は末尾を表すから。
> grep ^$ hoge2.txt | wc -l
⇒wcと組み合わせて空行の行数を出力する。
> grep -n ^$ hoge2.txt
-nで結果に行番号も表示できる。
> grep -v ^$ hoge2.txt
⇒hoge2.txtから空行を除いたすべての行を出力する。-vはinvert(反転)。規定した文字列を含まない行を検索するオプション。
> grep -v hoge tesed4.txt
⇒hogeを含まない行を出力する。すなわちhogeがある行を削除する。
■
> grep '^[ed]' hoge2.txt
⇒hoge2.txtから先頭文字がd,eの行を検索する。
> grep '^[c-e]' hoge2.txt
⇒hoge2.txtから先頭文字がc,d,eの行を検索する。
> grep '^[a-z]' hoge2.txt
⇒hoge2.txtから先頭文字がaからzの行を検索する。
■^について
> grep '^[^c-e]' hoge2.txt
⇒hoge2.txtから先頭文字がc,d,e以外の行を検索する。[]内の^は否定の意味を持つ。[]外の^は先頭の意味を持つ。
■オプション
-n:行番号を表示
-i:大文字小文字を区別しない。ignore-case,case sensitivie
-v:一致しなかった行を表示
■
.(どっと):任意の一文字。
文字*:文字の0回以上の繰り返し。
.*:任意の文字の0回以上の繰り返し。
.+:任意の文字の1回以上の繰り返し。egrepしか使えない。
?:0回か1回。egrep
> grep '^hoge. .*' hoge2.txt
hoge2.txtから先頭がhogeで始まり、hogeの後に任意の一文字があり、その後にスペースがあり、その後に任意の文字が0回以上繰り返される行を検索する。
■grep,fgrep
・egrepはgrepに似ている。grepは限られた正規表現しか使えないがegrepは全て使える。egrepだと+(1回以上の繰り返し)、?(0回か1回)が使える。
⇒grepに-Eオプションを付ければegrep
・fgrepは検索文字で正規表現が使えない。なので、.(どっと)も普通の文字として解釈される。また例として、「fgrep '^hoge' hoge2.txt」と「grep '^^hoge' hoge2.txt」は同じ。エスケープとかもない。
⇒grepに-Fオプションを付ければfgrep
・egrepは()カッコを使って文字列の繰り返しの検索もできる。下が例。
> egrep '^hoge4$' hoge2.txt
⇒hoge4のみの行を検索する。
> egrep '^(hoge4)+$' hoge2.txt
⇒hoge4が1回以上繰り返す行を検索する
> grep '^hoge4$' hoge2.txt
⇒hoge4のみの行を検索する。
> egrep '^(hoge4)+$' hoge2.txt
⇒使えない。
・egrepは|(棒)で論理和を使える。
> grep '(hoge2|hoge4)' hoge2.txt
⇒使えない
> egrep '(hoge2|hoge4)' hoge2.txt
⇒hoge2かhoge4を含む行を検索する。
> grep -E '(hoge2|hoge4)' hoge2.txt
⇒hoge2かhoge4を含む行を検索する。
参考
・linuxコマンド一覧
・grep