Linux-ൽ Grep, Egrep, Fgrep എന്നിവ തമ്മിലുള്ള വ്യത്യാസം എന്താണ്?


Unix പോലുള്ള സിസ്റ്റങ്ങളിലെ പ്രശസ്തമായ തിരയൽ ഉപകരണങ്ങളിലൊന്ന്, അത് ഒരു ഫയലായാലും അല്ലെങ്കിൽ ഒരു ലൈനായാലും ഫയലിലെ ഒന്നിലധികം ലൈനുകളായാലും എന്തും തിരയാൻ ഉപയോഗിക്കാം, അത് grep യൂട്ടിലിറ്റിയാണ്. സ്ട്രിംഗ് പാറ്റേൺ, അല്ലെങ്കിൽ reg-ex പാറ്റേൺ അല്ലെങ്കിൽ perl അടിസ്ഥാനമാക്കിയുള്ള reg-ex തുടങ്ങിയവ ഉപയോഗിച്ച് തിരയുന്നത്, ഇത് പിന്തുണയ്ക്കുന്ന നിരവധി ഓപ്uഷനുകൾ കാരണം ഇത് പ്രവർത്തനക്ഷമതയിൽ വളരെ വലുതാണ്.

വ്യത്യസ്തമായ പ്രവർത്തനങ്ങൾ കാരണം, ഇതിന് grep, egrep (വിപുലീകരിച്ച GREP), fgrep (Fixed GREP), pgrep (പ്രോസസ് GREP), rgrep (Recursive GREP) തുടങ്ങി നിരവധി വകഭേദങ്ങളുണ്ട്. എന്നാൽ ഈ വകഭേദങ്ങൾക്ക് യഥാർത്ഥ grep-ൽ നിന്ന് ചെറിയ വ്യത്യാസങ്ങളുണ്ട്. ജനപ്രിയമായതും വിവിധ ലിനക്സ് പ്രോഗ്രാമർമാർ പ്രത്യേക ജോലികൾക്കായി ഉപയോഗിക്കേണ്ടതുമാണ്.

ലിനക്uസ് ഉപയോക്താക്കളെ ആവശ്യാനുസരണം ഒന്നോ അല്ലെങ്കിൽ മറ്റൊരു പതിപ്പോ തിരഞ്ഞെടുക്കാൻ പ്രേരിപ്പിക്കുന്ന grep-ന്റെ മൂന്ന് പ്രധാന വേരിയന്റുകൾ, അതായത് 'grep', 'egrep', 'fgrep' എന്നിവ തമ്മിലുള്ള വ്യത്യാസങ്ങൾ എന്തൊക്കെയാണ് എന്നതാണ് അന്വേഷിക്കേണ്ട പ്രധാന കാര്യം.

grep-ന്റെ ചില പ്രത്യേക മെറ്റാ പ്രതീകങ്ങൾ

  1. + - മുമ്പത്തെ പ്രതീകത്തിന്റെ ഒന്നോ അതിലധികമോ സംഭവങ്ങൾക്ക് തുല്യമാണ്.
  2. ? - ഇത് മുൻ പ്രതീകത്തിന്റെ ഏതാണ്ട് 1 ആവർത്തനത്തെ സൂചിപ്പിക്കുന്നു. ഇഷ്ടം: a? ‘a’ അല്ലെങ്കിൽ ‘aa’ എന്നിവയുമായി പൊരുത്തപ്പെടും.
  3. ( – ഇതര പദപ്രയോഗത്തിന്റെ ആരംഭം.
  4. ) – ഇതര പദപ്രയോഗത്തിന്റെ അവസാനം.
  5. || കൊണ്ട് വേർതിരിക്കുന്ന ഏതെങ്കിലും പദപ്രയോഗവുമായി പൊരുത്തപ്പെടുന്നു. ഇതുപോലെ: \(a|b)cde” ഒന്നുകിൽ ‘abcde’ അല്ലെങ്കിൽ ‘bbcde’ എന്നിവയുമായി പൊരുത്തപ്പെടും.
  6. { – ഈ മെറ്റാ പ്രതീകം ശ്രേണി സ്പെസിഫയറിന്റെ ആരംഭത്തെ സൂചിപ്പിക്കുന്നു. ഇതുപോലെ: \a{2}” ഫയലിലെ \aa എന്നതുമായി പൊരുത്തപ്പെടുന്നു, അതായത് ഒരു 2 തവണ.
  7. } – ഈ മെറ്റാ പ്രതീകം ശ്രേണി സ്പെസിഫയറിന്റെ അവസാനത്തെ സൂചിപ്പിക്കുന്നു.

grep, egrep, fgrep എന്നിവ തമ്മിലുള്ള വ്യത്യാസങ്ങൾ

grep, egrep, fgrep എന്നിവ തമ്മിലുള്ള ചില പ്രധാന വ്യത്യാസങ്ങൾ താഴെപ്പറയുന്ന രീതിയിൽ എടുത്തുകാണിക്കാം. ഈ ഒരു കൂട്ടം ഉദാഹരണങ്ങൾക്കായി, ഓപ്പറേഷൻ നടത്തുന്ന ഫയൽ ഞങ്ങൾ അനുമാനിക്കുന്നു:

grep അല്ലെങ്കിൽ ഗ്ലോബൽ റെഗുലർ എക്സ്പ്രഷൻ പ്രിന്റ് എന്നത് Unix പോലുള്ള സിസ്റ്റങ്ങളിലെ പ്രധാന തിരയൽ പ്രോഗ്രാമാണ്, അത് ഏത് ഫയലിലോ ഫയലുകളുടെ ലിസ്റ്റിലോ ഏതെങ്കിലും കമാൻഡിന്റെ ഔട്ട്പുട്ടിലോ പോലും ഏത് തരത്തിലുള്ള സ്ട്രിംഗും തിരയാൻ കഴിയും.

ഇത് ഒരു തിരയൽ പാറ്റേണായി സാധാരണ സ്ട്രിംഗുകൾക്ക് പുറമെ അടിസ്ഥാന റെഗുലർ എക്സ്പ്രഷനുകൾ ഉപയോഗിക്കുന്നു. അടിസ്ഥാന റെഗുലർ എക്uസ്uപ്രഷനുകളിൽ (BRE), മെറ്റാ പ്രതീകങ്ങൾ: {,},(,),|,+,? അവയുടെ അർത്ഥം നഷ്ടപ്പെടുത്തുകയും സ്ട്രിംഗിന്റെ സാധാരണ പ്രതീകങ്ങളായി കണക്കാക്കുകയും ചെയ്യുന്നു, അവ പ്രത്യേക പ്രതീകങ്ങളായി കണക്കാക്കണമെങ്കിൽ രക്ഷപ്പെടേണ്ടതുണ്ട്.

കൂടാതെ, ഏതെങ്കിലും സ്ട്രിംഗും സാധാരണ എക്സ്പ്രഷനും വേഗത്തിൽ തിരയുന്നതിനായി grep ബോയർ-മൂർ അൽഗോരിതം ഉപയോഗിക്കുന്നു.

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

ഇവിടെ പോലെ, ( ), | എന്നിവയിൽ നിന്ന് രക്ഷപ്പെടാതെ കമാൻഡ് പ്രവർത്തിപ്പിക്കുമ്പോൾ, അത് പൂർണ്ണമായ സ്ട്രിംഗിനായി തിരഞ്ഞു, അതായത് \(f|g)ile” ഫയലിൽ. എന്നാൽ പ്രത്യേക പ്രതീകങ്ങൾ രക്ഷപ്പെടുമ്പോൾ, അവയെ സ്ട്രിംഗിന്റെ ഭാഗമായി കണക്കാക്കുന്നതിനുപകരം, grep അവയെ മെറ്റാ പ്രതീകങ്ങളായി കണക്കാക്കുകയും \file അല്ലെങ്കിൽ എന്നീ വാക്കുകൾക്കായി തിരയുകയും ചെയ്തു. ഫയലിൽ \gile.

Egrep അല്ലെങ്കിൽ grep -E എന്നത് grep അല്ലെങ്കിൽ Extended grep ന്റെ മറ്റൊരു പതിപ്പാണ്. ഒരു സാധാരണ എക്സ്പ്രഷൻ പാറ്റേണിനായി തിരയുമ്പോൾ grep-ന്റെ ഈ പതിപ്പ് കാര്യക്ഷമവും വേഗമേറിയതുമാണ്, കാരണം അത് മെറ്റാ-കഥാപാത്രങ്ങളെ അതേപടി പരിഗണിക്കുകയും അവയെ grep-ലെ പോലെ സ്ട്രിംഗുകളായി പകരം വയ്ക്കാതിരിക്കുകയും ചെയ്യുന്നു, അതിനാൽ അവയിൽ നിന്ന് രക്ഷപ്പെടാനുള്ള ഭാരത്തിൽ നിന്ന് നിങ്ങൾ മോചിതരാകുന്നു. grep ൽ. ഇത് ERE അല്ലെങ്കിൽ എക്സ്റ്റെൻഡഡ് റെഗുലർ എക്സ്പ്രഷൻ സെറ്റ് ഉപയോഗിക്കുന്നു.

എഗ്രെപ്പിന്റെ കാര്യത്തിൽ, നിങ്ങൾ മെറ്റാ-കഥാപാത്രങ്ങളിൽ നിന്ന് രക്ഷപ്പെട്ടില്ലെങ്കിലും, അത് അവയെ പ്രത്യേക പ്രതീകങ്ങളായി കണക്കാക്കുകയും അവയെ സ്ട്രിംഗിന്റെ ഭാഗമായി പരിഗണിക്കുന്നതിനുപകരം അവയുടെ പ്രത്യേക അർത്ഥത്തിന് പകരം വയ്ക്കുകയും ചെയ്യും.

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

ഇവിടെ പോലെ, ഈ പ്രതീകങ്ങളുടെ അർത്ഥം അർത്ഥമാക്കുന്നത് പോലെ മെറ്റാ-കഥാപാത്രങ്ങൾ രക്ഷപ്പെടാത്തപ്പോൾ egrep \file സ്ട്രിംഗ് തിരഞ്ഞു. സ്ട്രിംഗിന്റെ ഭാഗം കൂടാതെ ഫയലിൽ പൂർണ്ണമായ സ്ട്രിംഗായ \(f|g)ile” തിരഞ്ഞു.

Fgrep അല്ലെങ്കിൽ Fixed grep അല്ലെങ്കിൽ grep -F എന്നത് grep-ന്റെ മറ്റൊരു പതിപ്പാണ്, ഇത് സാധാരണ എക്സ്പ്രഷനുകൾക്ക് പകരം മുഴുവൻ സ്uട്രിംഗും തിരയുമ്പോൾ വേഗത്തിൽ തിരയുന്നു, കാരണം ഇത് പതിവ് എക്uസ്uപ്രഷനുകളോ മെറ്റാ പ്രതീകങ്ങളോ തിരിച്ചറിയുന്നില്ല. ഏതെങ്കിലും ഡയറക്ട് സ്ട്രിംഗ് തിരയുന്നതിന്, ഇത് തിരഞ്ഞെടുക്കേണ്ട grep പതിപ്പാണ്.

Fgrep പൂർണ്ണമായ സ്uട്രിംഗിനായി തിരയുന്നു, രക്ഷപ്പെട്ടാലും രക്ഷപ്പെട്ടില്ലെങ്കിലും പതിവ് പദപ്രയോഗത്തിന്റെ ഭാഗമായി പ്രത്യേക പ്രതീകങ്ങൾ പോലും തിരിച്ചറിയുന്നില്ല.

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

അതുപോലെ, മെറ്റാ-ക്യാരക്uടറുകൾ രക്ഷപ്പെടാത്തപ്പോൾ, ഫയലിലെ പൂർണ്ണമായ സ്uട്രിംഗായ \(f|g)ile” fgrep തിരഞ്ഞു, മെറ്റാ-ക്യാരക്uടറുകൾ രക്ഷപ്പെടുമ്പോൾ, fgrep കമാൻഡ് തിരഞ്ഞു. \\(f\|g\)ile” ഫയലിലെ എല്ലാ പ്രതീകങ്ങൾക്കും.

grep കമാൻഡിന്റെ ചില പ്രായോഗിക ഉദാഹരണങ്ങൾ ഞങ്ങൾ ഇതിനകം ഉൾപ്പെടുത്തിയിട്ടുണ്ട്, നിങ്ങൾക്ക് Linux-ൽ grep കമാൻഡ് കൂടുതൽ പ്രയോജനപ്പെടുത്തണമെങ്കിൽ അവ ഇവിടെ വായിക്കാം.

ഉപസംഹാരം

മുകളിൽ ഹൈലൈറ്റ് ചെയ്തിരിക്കുന്നത് 'grep', 'egrep', 'fgrep' എന്നിവ തമ്മിലുള്ള വ്യത്യാസങ്ങളാണ്. ഉപയോഗിക്കുന്ന പതിവ് എക്uസ്uപ്രഷനുകളുടെയും എക്uസിക്യൂഷന്റെ വേഗതയുടെയും വ്യത്യാസത്തിന് പുറമെ, grep-ന്റെ മൂന്ന് പതിപ്പുകൾക്കും വിശ്രമ കമാൻഡ് ലൈൻ പാരാമീറ്ററുകൾ ഒരേപോലെ തന്നെ തുടരുന്നു, കൂടാതെ \egrep അല്ലെങ്കിൽ \fgrep, \grep -E അല്ലെങ്കിൽ \grep -F ഉപയോഗിക്കാൻ ശുപാർശ ചെയ്യുന്നു.

grep-ന്റെ ഈ മൂന്ന് പതിപ്പുകൾക്കിടയിൽ മറ്റെന്തെങ്കിലും വ്യത്യാസങ്ങൾ നിങ്ങൾ കണ്ടെത്തുകയാണെങ്കിൽ, അവ നിങ്ങളുടെ അഭിപ്രായങ്ങളിൽ പരാമർശിക്കുക.