හැකි කෙනෙක් මට අතර තාක්ෂණික වෙනස්කම් කියන්න grep
, egrep
හා fgrep
හා සුදුසු උදාහරණ සැපයීමේ?
මම භාවිතා කිරීමට අවශ්ය වන්නේ ඇයි grep
කට egrep
සහ අනෙක් අතට?
හැකි කෙනෙක් මට අතර තාක්ෂණික වෙනස්කම් කියන්න grep
, egrep
හා fgrep
හා සුදුසු උදාහරණ සැපයීමේ?
මම භාවිතා කිරීමට අවශ්ය වන්නේ ඇයි grep
කට egrep
සහ අනෙක් අතට?
Answers:
Ically තිහාසිකව මෙම ස්විචයන් වෙනම ද්විමයන්හි සපයන ලදී. සමහර පැරණි යුනික්ස් පද්ධති වලදී ඔබට වෙනම ද්විමයන් ඇමතිය යුතු බව ඔබට පෙනී යනු ඇත, නමුත් සියලු නවීන පද්ධතිවල ස්විචයන් වඩාත් කැමති වේ. Grep සඳහා වන man පිටුවේ මේ පිළිබඳ විස්තර ඇත.
ඔවුන් කරන දෙය සම්බන්ධයෙන්, -E
grep විශේෂ මාදිලියකට මාරු වන අතර එමඟින් ප්රකාශනය එහි සාමාන්ය රටා ගැලපීමට වඩා 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
egrep
හෝ fgrep
; -E
සහ -F
සම්මත වේ. ඇත්ත වශයෙන්ම මෙහි කුඩා නොගැලපීම් තිබේ egrep
: එය {
තරමක් වෙනස් ලෙස සලකයි .
fgrep
Aho-Corasick පසුබිම grep
භාවිතා කරන අතර Commentz-Walter හි නවීකරණය කරන ලද අනුවාදයක් භාවිතා කරයි. මෙයින් අදහස් කරන්නේ grep
නරකම අවස්ථාව O (mn) වන අතර fgrep
නරකම O (m + n) බවයි.
egrep
අතර grep -E
ඒවා ක්රියාත්මක කළ හැකි වූයේ විවිධ ක්රියාත්මක කළ හැකි, කාර්යබහුල බොක්ස් සහ බීඑස්ඩී ග්රෙප් ය. මෙම ප්රභේද දෙකෙහි පොසික්ස් නොවන රීජෙක්ස් ඉදිකිරීම් සඳහා චර්යාත්මක වෙනස්කම් ඇත \s
. මෙය බොහෝ ව්යාකූලත්වයට හේතු විය ...
සිට man grep
:
egrep යනු grep -E හා සමාන වේ. fgrep යනු grep -F හා සමාන වේ. සෘජු ආයාචනය egrep හෝ fgrep අවලංගු කර ඇති නමුත් historical තිහාසික යෙදුම් සඳහා ඉඩ ලබා දීම සඳහා සපයනු ලැබේ නවීකරණයකින් තොරව ධාවනය කිරීමට ඒවා මත රඳා පවතී.
අඹරන ලද නූල් රටාවක් ලෙස අර්ථ නිරූපණය කිරීමට ඔබට අවශ්යfgrep
නැතිනම් ඔබ භාවිතා කරයි.grep -F
ඔබ භාවිතා කරන්නේ egrep
හෝ grep -E
ඔබට දීර් re regexp භාවිතා කිරීමට අවශ්ය නම්.
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.)
දෝෂ පණිවිඩ වෙනස් වුවද.
"Man grep" වෙතින්:
ප්රභේද වැඩසටහන් තුනක් උදා: fgrep සහ rgrep ඇත. egrep යනු grep -E හා සමාන වේ. fgrep යනු grep -F හා සමාන වේ. rgrep යනු grep -r හා සමාන වේ. සෘජු ආයාචනය egrep හෝ fgrep ලෙස ප්රතික්ෂේප කරනු ලැබේ, නමුත් ඒවා මත රඳා පවතින historical තිහාසික යෙදුම් නවීකරණයකින් තොරව ක්රියාත්මක කිරීමට ඉඩ ලබා දේ.
ඔබ වාචික නූලක් සොයන්නේ නම් සහ ඔබ සම්මත කළ නූල වාචිකව අර්ථකථනය කර ඇති බවට සහතික වීමට අවශ්ය නම් (එනම් තිතක් හෝ ප්රශ්නාර්ථ ලකුණ වෙනත් දෙයක් ලෙස අර්ථ දැක්විය හැකි යැයි අවදානමකින් තොරව) fgrep හෝ egrep -F භාවිතා කරන්න.
Egrep සහ grep අතර වෙනස සම්බන්ධයෙන් ගත් කල, මම සිතන්නේ egrep බොහෝ විට ඔබට අවශ්ය දෙයයි. ග්නූ අත්පොත වෙබ් අඩවිය සින්ටැක්ස් හි ඇති බව පෙනෙන grep සහ egrep අතර වෙනස්කම් ලැයිස්තුගත කරයි: සමහර දේ සඳහා කප්පාදුවක් අවශ්ය වන අතර අනෙක් ඒවා එසේ නොවේ. මම හිතන්නේ එග්රෙප් පර්ල් රීජෙක්ස් සහ ජාවාස්ක්රිප්ට් රීජෙක්ස් සමඟ වඩා “අනුකූල” වන බැවින් එග්රෙප් භාවිතා කිරීම මට පහසු වේ.
Btw. මම ඇත්තටම ලබා ගැනීමට අනුබල ack උත්සාහක - එය PREGs සහාය, සහ තවත් ප්රයෝජනවත් පෙරනිමි (එනම් වර්ණ, .svn වැනි බොහෝ විට නොව-දේ-ඔබ-අගහිඟකම් බහලුම් පනින, symlinks අනුගමනය කිරීමට හැකියාව ඇති අතර, එය වර්ගය ටිකක් පහසු වේ grep -E ට වඩා අක්).