grep understands three different versions of regular expression syntax: "basic," "extended" and "perl." In GNU grep, there is no difference in available functionality between basic and extended syntaxes. In other implementations, basic regular expressions are less powerful.
本来のUNIXでは別もんです。 でも、機能的にだいぶ重複してるので、互換プログラムである GNU grep では「3コマンドの機能を全部まとめて1プログラムに入れちゃった」ってことで。
> zgrepも似たような扱いなのかな。
% man grep GREP(1) GREP(1)
NAME grep, egrep, fgrep, zgrep, zegrep, zfgrep, bzgrep, bzegrep, bzfgrep - print lines matching a pattern (略) In addition, two variant programs egrep and fgrep are available. egrep is the same as grep -E. fgrep is the same as grep -F. zgrep is the same as grep -Z. zegrep is the same as grep -EZ. zfgrep is the same as grep -FZ. (略) -Z, --decompress Decompress the input data before searching. This option is only available if compiled with zlib(3) library. (略) GNU Project 2002/01/22 GREP(1)
egrep (スコア:1)
そういうときはいつも
% egrep "pat1|pat2" file
ってやってました。
grep -e だと | は\でエスケープしないといけなかったのか。
Re: (スコア:1)
egrepだとエスケープしなくてよかったんだ…orz
# 動作が違うとは思ってなかった
Re:egrep (スコア:1)
私もegrep派なんですが、むしろ「grep でも、\| でOR指定ができる」ということの方が驚きです。
egrep の e は extended の e。egrep は「検索条件に拡張された正規表現が使える」のと「非決定性オートマトンから決定性オートマトンに変換してから検索するので、メモリ消費が大きいけど処理は高速」なのが特徴だったのですが…
その「拡張正規表現」で増えた機能の一つが「|」(OR選択)ですね。あとは「(~)」によるグルーピング、「?」(0回か1回)、「+」(1回以上)とか。これらは従来のgrepやvi/exでは使えません。
#だから、grep と egrep では、動作はかなり違う、という認識。
ところが、GNU grep の場合、grep/fgrep/egrep の3コマンドの実体は同じで、ファイル名によってモードが切り替わるようになってます。でもって、
ってことで、grepでも\|や\(など\を付けることで拡張正規表現も使えるようになっており、表現能力そのものもegrep相当に引き上げられてるんですね。
Re:egrep (スコア:1)
自分も非Linux環境だとgrepとegrepは結構使い分けてたんですが、Linux(というかGNUな環境)だと
>grep/fgrep/egrep の3コマンドの実体は同じ
なんであんまり意識してなかったんですよね。そしたら思ってたよりも挙動が違ってた…。最近は非GNUな環境にはほとんど縁がなかったからegrepを明示的に使った記憶もないし、エスケープするかどうかはその場で両方試してうまくいった方を使うみたいなことをしていたから気づく要素がなかったみたいです。
Re:egrep (スコア:1)
>grep/fgrep/egrep の3コマンドの実体は同じ
それぞれ別もんだと思ってました、zgrepも似たような扱いなのかな。
普段はgrep使っていて、or検索のときだけegrepを、フレーズというか記号入交りの「文」で検索するときはfgrepという感じでなんとなく使い分けてました。
Re:egrep (スコア:1)
> 普段はgrep使っていて、or検索のときだけegrepを、フレーズというか記号入交りの「文」で検索するときはfgrepという感じでなんとなく使い分けてました。
ああ、私もまったく同じように使い分けてます。
grep/egrep/frepが実体が同じだってことは知ってますけど、gzip/gunzip とかと同じのりで、使いたい操作でコマンドを使い分ける感じで。
> それぞれ別もんだと思ってました
本来のUNIXでは別もんです。
でも、機能的にだいぶ重複してるので、互換プログラムである GNU grep では「3コマンドの機能を全部まとめて1プログラムに入れちゃった」ってことで。
> zgrepも似たような扱いなのかな。
というわけで、zgrep も実体はgrepですね。