`Grep`,` egrep` සහ `fgrep` අතර වෙනස කුමක්ද?


287

හැකි කෙනෙක් මට අතර තාක්ෂණික වෙනස්කම් කියන්න grep, egrepහා fgrepහා සුදුසු උදාහරණ සැපයීමේ?

මම භාවිතා කිරීමට අවශ්ය වන්නේ ඇයි grepකට egrepසහ අනෙක් අතට?


7
සුපර් යූසර් සතුව grep, egrep, fgrep සහ pgrep අතර ඇති වෙනස්කම් පිළිබඳ විශිෂ්ට නිදර්ශනයක් ඇත: superuser.com/questions/508881/…
එරික් ලෙස්චින්ස්කි

Answers:


304
  • egrep 100% ට සමාන වේ grep -E
  • fgrep 100% ට සමාන වේ grep -F

Ically තිහාසිකව මෙම ස්විචයන් වෙනම ද්විමයන්හි සපයන ලදී. සමහර පැරණි යුනික්ස් පද්ධති වලදී ඔබට වෙනම ද්විමයන් ඇමතිය යුතු බව ඔබට පෙනී යනු ඇත, නමුත් සියලු නවීන පද්ධතිවල ස්විචයන් වඩාත් කැමති වේ. Grep සඳහා වන man පිටුවේ මේ පිළිබඳ විස්තර ඇත.

ඔවුන් කරන දෙය සම්බන්ධයෙන්, -Egrep විශේෂ මාදිලියකට මාරු වන අතර එමඟින් ප්‍රකාශනය එහි සාමාන්‍ය රටා ගැලපීමට වඩා ERE (දීර් Regular නිත්‍ය ප්‍රකාශනය) ලෙස ඇගයීමට ලක් කෙරේ. මෙම වාක්‍ය ඛණ්ඩයේ තොරතුරු මෑන් පිටුවේ ඇත.

-E, --extended-regexp
PATTERN දීර් extended නිත්‍ය ප්‍රකාශනයක් ලෙස අර්ථ නිරූපණය කරන්න

මෙම -Fස්විචය වෙනස් ආකාරයෙන් මෙය ගැලපෙන රටාවක් පිළිගන්නා, එහෙත් එවිට එක් පේළියකට එක් සෙවුම් string එකකට බව රටාව භේදනය හා හෝ විශේෂ රටාව ගැලපෙන නොකර නූල් ඕනෑම මත සොයන්න කරන්නේ කොහේද? බවට සුරකියි මාරු.

-F, --fixed-strings
නව රේඛා මගින් වෙන් කරන ලද ස්ථාවර නූල් ලැයිස්තුවක් ලෙස PATTERN අර්ථ නිරූපණය කරන්න, ඒවායින් ඕනෑම එකක් ගැලපේ.

උදාහරණ අවස්ථා කිහිපයක් මෙන්න:

  • සරල පෙළෙහි යුනික්ස් පරිශීලක නාම දහයක් සඳහන් ලැයිස්තුවක් ඔබ සතුව ඇත. ලැයිස්තුගත කර ඇති පරිශීලකයින් දස දෙනාගෙන් කිසිවෙකු විශේෂ කණ්ඩායම්වල සිටී දැයි බැලීමට ඔබේ යන්ත්‍රයේ කණ්ඩායම් ගොනුව සෙවීමට ඔබට අවශ්‍යය:

    grep -F -f user_list.txt /etc/group
    

    මෙහි -Fස්විචය උදව් වීමට හේතුව ඔබේ රටා ගොනුවේ පරිශීලක නාම සරල පෙළ නූල් ලෙස අර්ථ නිරූපණය කිරීමයි. උදාහරණයක් ලෙස තිත් වල් කාඩ් වලට වඩා තිත් ලෙස අර්ථ දැක්විය හැකිය.

  • විසිතුරු ප්‍රකාශනයක් භාවිතා කර සෙවීමට ඔබට අවශ්‍යය. උදාහරණයක් ලෙස වරහන් යනු OR ක්‍රියාකරුවෙකු ලෙස භාවිතා කරන ()කණ්ඩායම් දැක්වීමට භාවිතා කළ හැකිය |. ඔබට මෙම සෙවීම ක්‍රියාත්මක කළ හැක්කේ -E:

    grep -E '^no(fork|group)' /etc/group
    

    ... "nofork" හෝ "nogroup" වලින් ආරම්භ වන රේඛා ආපසු ලබා දීමට. -Eස්විචය නොමැතිව ඔබට සම්බන්ධ වූ විශේෂ අක්ෂර වලින් ගැලවීමට සිදුවනු ඇත, මන්ද සාමාන්‍ය රටා ගැලපීමත් සමඟ ඔවුන් එම නිශ්චිත රටාව සොයනු ඇත;

    grep '^no\(fork\|group\)' /etc/group
    

17
සමහරක් පද්ධති නැත egrepහෝ fgrep; -Eසහ -Fසම්මත වේ. ඇත්ත වශයෙන්ම මෙහි කුඩා නොගැලපීම් තිබේ egrep: එය {තරමක් වෙනස් ලෙස සලකයි .
ගිලෙස්ගේ SO- නපුරු වීම නවත්වන්න '

4
fgrepAho-Corasick පසුබිම grepභාවිතා කරන අතර Commentz-Walter හි නවීකරණය කරන ලද අනුවාදයක් භාවිතා කරයි. මෙයින් අදහස් කරන්නේ grepනරකම අවස්ථාව O (mn) වන අතර fgrepනරකම O (m + n) බවයි.
ස්ලේටර් වික්ටෝරොෆ්

2
ගිලෙස් "au contraire mon capitan", සමහර පද්ධති (සමහර විට පැරණි) සම්මත grep සඳහා -F විකල්පයක් නොතිබිය හැකි නමුත් fgrep එකක් තිබිය හැකිය, සමහර ppl විශේෂ චරිත සඳහා grep භාවිතා කිරීම පිළිබඳව මා සොයාගත් මුල් ත්‍රෙඩ් එක ගැන පැමිණිලි කරයි
THESorcerer

මම මෑතකදී ඇන්ඩ්‍රොයිඩ් පද්ධතියක් මත සිදු වූ egrepඅතර grep -Eඒවා ක්‍රියාත්මක කළ හැකි වූයේ විවිධ ක්‍රියාත්මක කළ හැකි, කාර්යබහුල බොක්ස් සහ බීඑස්ඩී ග්‍රෙප් ය. මෙම ප්‍රභේද දෙකෙහි පොසික්ස් නොවන රීජෙක්ස් ඉදිකිරීම් සඳහා චර්යාත්මක වෙනස්කම් ඇත \s. මෙය බොහෝ ව්‍යාකූලත්වයට හේතු විය ...
Lii

33

සිට man grep:

 egrep යනු grep -E හා සමාන වේ.
 fgrep යනු grep -F හා සමාන වේ. සෘජු ආයාචනය egrep හෝ  
  fgrep අවලංගු කර ඇති නමුත් historical තිහාසික යෙදුම් සඳහා ඉඩ ලබා දීම සඳහා සපයනු ලැබේ
  නවීකරණයකින් තොරව ධාවනය කිරීමට ඒවා මත රඳා පවතී.

අඹරන ලද නූල් රටාවක් ලෙස අර්ථ නිරූපණය කිරීමට ඔබට අවශ්‍යfgrep නැතිනම් ඔබ භාවිතා කරයි.grep -F

ඔබ භාවිතා කරන්නේ egrepහෝ grep -Eඔබට දීර් re regexp භාවිතා කිරීමට අවශ්‍ය නම්.


15

egrepසහ fgrepමූලික වශයෙන් සමාන grep -Eසහ grep -F(පිළිවෙලින්):

   -E, --extended-regexp
          Interpret PATTERN as an extended regular  expression  (ERE,  see
          below).  (-E is specified by POSIX.)

   -F, --fixed-strings
          Interpret  PATTERN  as  a  list  of  fixed strings, separated by
          newlines, any of which is to be matched.  (-F  is  specified  by
          POSIX.)

දෝෂ පණිවිඩ වෙනස් වුවද.


3
හරි, නමුත් කුමක් වේ දීර්ඝ ප්රකාශන? එය සැබවින්ම පහතින් විස්තර නොකරයි. උදාහරණ කිහිපයක් හොඳයි ...
සමාවයවිකතාව

@ සමාවර්ත: මෙම විකිබුක්ස් සබැඳිය එය මනාව පැහැදිලි කරයි ...
zb226

8

"Man grep" වෙතින්:

ප්‍රභේද වැඩසටහන් තුනක් උදා: fgrep සහ rgrep ඇත. egrep යනු grep -E හා සමාන වේ. fgrep යනු grep -F හා සමාන වේ. rgrep යනු grep -r හා සමාන වේ. සෘජු ආයාචනය egrep හෝ fgrep ලෙස ප්‍රතික්ෂේප කරනු ලැබේ, නමුත් ඒවා මත රඳා පවතින historical තිහාසික යෙදුම් නවීකරණයකින් තොරව ක්‍රියාත්මක කිරීමට ඉඩ ලබා දේ.


2
ප්රශ්නය සුදුසු උදාහරණයක් ඉල්ලා සිටී.
සමාවයවිකතාව

3

ඔබ වාචික නූලක් සොයන්නේ නම් සහ ඔබ සම්මත කළ නූල වාචිකව අර්ථකථනය කර ඇති බවට සහතික වීමට අවශ්‍ය නම් (එනම් තිතක් හෝ ප්‍රශ්නාර්ථ ලකුණ වෙනත් දෙයක් ලෙස අර්ථ දැක්විය හැකි යැයි අවදානමකින් තොරව) fgrep හෝ egrep -F භාවිතා කරන්න.

Egrep සහ grep අතර වෙනස සම්බන්ධයෙන් ගත් කල, මම සිතන්නේ egrep බොහෝ විට ඔබට අවශ්‍ය දෙයයි. ග්නූ අත්පොත වෙබ් අඩවිය සින්ටැක්ස් හි ඇති බව පෙනෙන grep සහ egrep අතර වෙනස්කම් ලැයිස්තුගත කරයි: සමහර දේ සඳහා කප්පාදුවක් අවශ්‍ය වන අතර අනෙක් ඒවා එසේ නොවේ. මම හිතන්නේ එග්‍රෙප් පර්ල් රීජෙක්ස් සහ ජාවාස්ක්‍රිප්ට් රීජෙක්ස් සමඟ වඩා “අනුකූල” වන බැවින් එග්‍රෙප් භාවිතා කිරීම මට පහසු වේ.

Btw. මම ඇත්තටම ලබා ගැනීමට අනුබල ack උත්සාහක - එය PREGs සහාය, සහ තවත් ප්රයෝජනවත් පෙරනිමි (එනම් වර්ණ, .svn වැනි බොහෝ විට නොව-දේ-ඔබ-අගහිඟකම් බහලුම් පනින, symlinks අනුගමනය කිරීමට හැකියාව ඇති අතර, එය වර්ගය ටිකක් පහසු වේ grep -E ට වඩා අක්).

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.