Linux コマンド -- grep -- 正規表現を用いたファイルの内容の抽出
grep
よく ls の内容を絞るのに使う。
ls a ab abc ls | grep ab ab abc
引数の文字を含むモノに絞る。
cat の戻り値も絞れる。
fgrep との違い
この問題によると fgrep では正規表現が使えない
試してみる
そもそも正規表現が機能してない問題
touch hoge touch HOGE ls hoge
大文字小文字ではファイルは作成できなかった
なので ls ではなく cat でやる
cat fileForGrepReg.txt hoge HOGE cat fileForGrepReg.txt | grep 'hoge' cat fileForGrepReg.txt | grep 'hoge|HOGE' cat fileForGrepReg.txt | fgrep 'hoge' hoge cat fileForGrepReg.txt | fgrep 'hoge|HOGE'
cat | grep では 文字列指定も or 指定も動かず
cat | fgrep では文字列指定のみが動いた
grep FileName では
grep 'hoge|HOGE' fileForGrepReg.txt grep 'hoge' fileForGrepReg.txt hoge
or が動いてない、これ or の書き方違うんじゃないか?
あってる
拡張性期表現をする
-E をつけないと受付ないらしい。試してみる
grep 'hoge|HOGE' fileForGrepReg.txt grep -E 'hoge|HOGE' fileForGrepReg.txt hoge HOGE
できた!!! 拡張正規表現の E らしい。
| は原初的な正規表現ではなかった。
fgrep を今度こそ検証
fgrep 'hoge|HOGE' fileForGrepReg.txt fgrep -E 'hoge|HOGE' fileForGrepReg.txt hoge HOGE
fgrep も -E 使えば拡張正規表現はでる
fgrep 'hog.' fileForGrepReg.txt fgrep -E 'hog.' fileForGrepReg.txt hoge grep 'hog.' fileForGrepReg.txt hoge
しかし通常正規表現の場合、fgrep は -E をつけないと結果を返さないが
grep は -E をつけなくても返した。
つまり通常の grep は -E がなくても or などの難しいものを含まない正規表現なら使えるようだ。
grep -v regularExpression fileName
逆に、正規表現マッチしないものを出力する