Kāda ir atšķirība starp Grep, Egrep un Fgrep Linux?


Viens no slavens meklēšanas rīks Unix līdzīgās sistēmās, ko var izmantot, lai meklētu jebko, neatkarīgi no tā, vai tas ir fails, rindiņa vai vairākas faila rindas, ir grep lietderība. Tā funkcionalitāte ir ļoti plaša, ko var attiecināt uz lielo opciju skaitu, ko tā atbalsta, piemēram: meklēšana, izmantojot virknes modeli vai reg-ex modeli, vai perl balstītu reg-ex utt.

Dažādu funkcionalitāšu dēļ tam ir daudz variantu, tostarp grep, egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (Recursive GREP) utt. Bet šiem variantiem ir nelielas atšķirības no sākotnējā grep, kas tos ir padarījis populārs, un to dažādi Linux programmētāji var izmantot noteiktiem uzdevumiem.

Galvenais, kas vēl jāizpēta, ir kādas ir atšķirības starp trim galvenajiem variantiem, ti, “grep”, “egrep” un “fgrep”, kas liek Linux lietotājiem izvēlēties vienu vai otru versiju atbilstoši prasībām.

Dažas īpašas grep meta rakstzīmes

  1. + - ekvivalents vienam vai vairākiem iepriekšējās rakstzīmes gadījumiem.
  2. ? - tas apzīmē gandrīz vienu iepriekšējās rakstzīmes atkārtošanos. Piemēram: a? atbilstu ‘a’ vai ‘aa’.
  3. ( - pārmaiņu izteiksmes sākums.
  4. ) - alternatīvās izteiksmes beigas.
  5. | - atbilst jebkuram izteicienam, kas atdalīts ar | . Piemēram: “(a | b) cde” atbilstu “abcde” vai “bbcde”.
  6. { - šis meta simbols norāda diapazona specifikatora sākumu. Piemēram: “a {2}” failā atbilst “aa”, t.i., 2 reizes.
  7. } - šis meta simbols norāda diapazona specifikatora beigas

Atšķirības starp grep, egrep un fgrep

Dažas galvenās atšķirības starp grep, egrep un fgrep var izcelt šādi. Šim piemēru kopumam mēs pieņemam, ka fails, ar kuru tiek veikta darbība:

grep jeb Global Regular Expression Print ir galvenā meklēšanas programma Unix līdzīgās sistēmās, kas var meklēt jebkura veida virknes jebkurā failā vai failu sarakstā vai pat jebkuras komandas izvadā.

Kā meklēšanas raksts tas izmanto parastās izteiksmes, izņemot parastās virknes. Regulārajās izteiksmēs (BRE) meta rakstzīmes, piemēram: {,} , (,) , | , + , ? zaudē nozīmi un tiek uzskatīti par parastām virknes rakstzīmēm, un, lai tos uzskatītu par īpašām rakstzīmēm, tie ir jāizvairās.

Arī grep izmanto Bojera-Mūra algoritmu, lai ātri meklētu jebkuru virkni vai regulāru izteiksmi.

$ grep -C 0 '(f|g)ile' check_file
$ grep -C 0 '\(f\|g\)ile' check_file

Tāpat kā šeit, kad komanda tiek palaista, neizbēgot no () un | , tā meklēja visu virkni, ti, “(f | g) ile” failā. Bet, kad īpašās rakstzīmes tika aizbēgtas, grep tā vietā, lai tās uzskatītu par virknes sastāvdaļu, apstrādāja tās kā meta rakstzīmes un meklēja vārdus “file” vai “gile” failā.

Egrep vai grep -E ir vēl viena grep vai paplašinātā grep versija. Šī grep versija ir efektīva un ātra, meklējot regulāras izteiksmes modeli, jo tā pret meta rakstzīmēm izturas tāda, kāda tā ir, un neaizstāj tās kā virknes, piemēram, grep, un tādējādi jūs esat atbrīvots no sloga izvairīties no tiem kā grep. Tas izmanto ERE vai paplašināto regulāro izteiksmju komplektu.

Egrep gadījumā, pat ja jūs neizbēgat no meta rakstzīmēm, tas tos izturas kā pret īpašām rakstzīmēm un aizstāj ar to īpašo nozīmi, nevis uzskata tos par virknes daļu.

$ egrep -C 0 '(f|g)ile' check_file
$ egrep -C 0 '\(f\|g\)ile' check_file

Tāpat kā šeit, egrep meklēja virkni “file” , kad meta rakstzīmes netika aizbēgtas, kā tas nozīmētu ar šo rakstzīmju nozīmi. Bet, kad šīs rakstzīmes tika aizbēgtas, tad egrep tos uzskatīja par virknes daļu un failā meklēja pilnu virkni “(f | g) ile” .

Fgrep vai Fixed grep vai grep -F ir vēl viena grep versija, kas ātri tiek meklēta, meklējot visu virkni, nevis regulāro izteiksmi, jo tā neatpazīst ne regulārās izteiksmes, ne meta rakstzīmes. Lai meklētu jebkuru tiešu virkni, šī ir jāizvēlas grep versija.

Fgrep meklē pilnīgu virkni un pat neatpazīst īpašās rakstzīmes kā daļu no regulārās izteiksmes, pat ja tas ir izbēdzis vai nav.

$ fgrep -C 0 '(f|g)ile' check_file
$ fgrep -C 0 '\(f\|g\)ile' check_file

Līdzīgi kā tad, kad meta rakstzīmes netika aizbēgtas, fgrep failā meklēja visu virkni “(f | g) ile” un, kad meta rakstzīmes tika aizbēgtas, komanda fgrep meklēja “\ (f\| g \) ile” visas rakstzīmes, kas atrodas failā.

Mēs jau esam apskatījuši dažus praktiskus grep komandas piemērus, kurus varat izlasīt šeit, ja vēlaties iegūt vairāk no grep komandas Linux.

Secinājums

Iepriekš izceltas atšķirības starp “grep”, “egrep” un “fgrep”. Neatkarīgi no izmantoto regulāro izteiksmju kopas un izpildes ātruma, atpūtas komandrindas parametri paliek nemainīgi visām trim grep versijām un pat “egrep” vai “fgrep”, “grep -E” vai “grep - vietā F ”ieteicams lietot.

Ja konstatējat citas atšķirības starp šīm trim grep versijām, pieminiet tās savos komentāros.