KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Linux コマンド -- grep -- 正規表現を用いたファイルの内容の抽出

grep

よく ls の内容を絞るのに使う。

ls
a       ab      abc
ls | grep ab
ab
abc

引数の文字を含むモノに絞る。

cat の戻り値も絞れる。

fgrep との違い

mondai.ping-t.com

この問題によると 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 の書き方違うんじゃないか?

www-creators.com

あってる

拡張性期表現をする

bi.biopapyrus.jp

-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

逆に、正規表現マッチしないものを出力する