Grep naudojimas

E
  • 4 Rugp '11

Visada, kai prisireikia ką nors grepinti, naudoju perl like regexp su -P flagu, nes tokių jau išmokau, kai kitoms kalboms reikėjo, o kuo skriasi defaultiniai bash naudojami regexp? Kur tai aiškiai aprašyta?

S
  • 13 Grd '11

grep komanda palaiko šiuos Regular Expression standartus:

BRE - Basic Regular Expression (grep)
ERE - Extended Regular Expression (grep -E)
PCRE - Perl-compatible Regular Expression (grep -P)

Lentelėje žemiau surašiau kuo jie skiriasi:

========= ========= ==============
BRE       ERE       PCRE
--------- --------- --------------
.         .         .
[ ]       [ ]       [ ]
[^ ]      [^ ]      [^ ]
^         ^         ^
$         $         $
\( \)     ( )       ( )
\N        \N        \N
*         *         *
\+        +         +
\{m,n\}   {m,n}     {m,n}
\?        ?         ?
\|        |         |
\w \W     \w \W     \w \W
\b \B     \b \B     \b \B
\s \S     \s \S     \s \S
[[:...:]] [[:...:]] [[:...:]]
                    \d \D
                    *? +?
                    (?=...)
                    (?!=...)
                    (?<=...)
                    (?>=...)
                    (:...)
                    (?P<name>...)
                    (?R)
                    ... ir daugiau
========= ========= ==============

Iš esmės BRE ir ERE yra labai panašūs, o PCRE yra visiškai atskiras reikalas,
turintis gausybę papildomų funkcijų, kurių surašiau tik kelias...

Informacijos šaltiniai:

man grep
man pcrepattern
http://en.wikipedia.org/wiki/Regular_expression
http://en.wikipedia.org/wiki/Perl_Compa ... xpressions

E
  • 13 Grd '11

Kodėl tada nepaliktas tik PCRE, jei jis visokeriopai pranašesnis? Matyt dėl istorinių priežasčių ir backwards compatibility.

S
  • 13 Grd '11

Nežinau, kodėl nepalikta, bet gali būti ir dėl to, kad BRE kasdieniniam naudojimui yra gan patogus ir neperkrautas specialią prasmę turinčiais simboliais.