ഫയലുകളിൽ ടെക്uസ്uറ്റോ സ്uട്രിംഗോ ഫിൽട്ടർ ചെയ്യുന്നതിന് Awk, റെഗുലർ എക്uസ്uപ്രഷനുകൾ എങ്ങനെ ഉപയോഗിക്കാം


ഒരു സ്uട്രിംഗിൽ നിന്നോ ഫയലിൽ നിന്നോ ടെക്uസ്uറ്റ് വായിക്കുന്നതിനോ എഡിറ്റ് ചെയ്യുന്നതിനോ ഞങ്ങൾ ചില കമാൻഡുകൾ Unix/Linux-ൽ പ്രവർത്തിപ്പിക്കുമ്പോൾ, നൽകിയിരിക്കുന്ന താൽപ്പര്യമുള്ള വിഭാഗത്തിലേക്ക് ഔട്ട്uപുട്ട് ഫിൽട്ടർ ചെയ്യാൻ ഞങ്ങൾ മിക്കപ്പോഴും ശ്രമിക്കാറുണ്ട്. ഇവിടെയാണ് സാധാരണ പദപ്രയോഗങ്ങൾ ഉപയോഗിക്കുന്നത്.

ഒരു റെഗുലർ എക്uസ്uപ്രഷൻ എന്നത് നിരവധി പ്രതീകങ്ങളുടെ ശ്രേണിയെ പ്രതിനിധീകരിക്കുന്ന ഒരു സ്ട്രിംഗായി നിർവചിക്കാം. ഒരു കമാൻഡിന്റെയോ ഫയലിന്റെയോ ഔട്ട്uപുട്ട് ഫിൽട്ടർ ചെയ്യാനും ഒരു ടെക്uസ്uറ്റിന്റെ അല്ലെങ്കിൽ കോൺഫിഗറേഷൻ ഫയലിന്റെ ഒരു വിഭാഗം എഡിറ്റുചെയ്യാനും മറ്റും നിങ്ങളെ അനുവദിക്കുന്നു എന്നതാണ് റെഗുലർ എക്uസ്uപ്രഷനുകളെക്കുറിച്ചുള്ള ഏറ്റവും പ്രധാനപ്പെട്ട കാര്യങ്ങളിലൊന്ന്.

പതിവ് പദപ്രയോഗങ്ങൾ നിർമ്മിച്ചിരിക്കുന്നത്:

  1. സ്uപെയ്uസ്, അണ്ടർസ്uകോർ(_), A-Z, a-z, 0-9 പോലുള്ള സാധാരണ പ്രതീകങ്ങൾ.
  2. സാധാരണ പ്രതീകങ്ങളിലേക്ക് വികസിപ്പിച്ചിരിക്കുന്ന മെറ്റാ പ്രതീകങ്ങൾ, അവയിൽ ഉൾപ്പെടുന്നു:
    1. (.) ഒരു പുതിയ ലൈൻ ഒഴികെയുള്ള ഏതെങ്കിലും ഒരു പ്രതീകവുമായി ഇത് പൊരുത്തപ്പെടുന്നു.
    2. (*) അതിന് മുമ്പുള്ള അടുത്ത പ്രതീകത്തിന്റെ പൂജ്യമോ അതിലധികമോ അസ്തിത്വങ്ങളുമായി ഇത് പൊരുത്തപ്പെടുന്നു.
    3. [ പ്രതീകം(കൾ) ] പ്രതീകം(കളിൽ) വ്യക്തമാക്കിയിട്ടുള്ള ഏതെങ്കിലും പ്രതീകങ്ങളുമായി പൊരുത്തപ്പെടുന്നു, ഒരു ശ്രേണിയെ അർത്ഥമാക്കാൻ ഒരാൾക്ക് ഒരു ഹൈഫൻ (-) ഉപയോഗിക്കാനും കഴിയും. [a-f], [1-5] എന്നിങ്ങനെയുള്ള പ്രതീകങ്ങളുടെ.
    4. ^ ഇത് ഒരു ഫയലിലെ ഒരു വരിയുടെ തുടക്കവുമായി പൊരുത്തപ്പെടുന്നു.
    5. $ ഒരു ഫയലിലെ വരിയുടെ അവസാനവുമായി പൊരുത്തപ്പെടുന്നു.
    6. \ അതൊരു രക്ഷപ്പെടൽ പ്രതീകമാണ്.

    ടെക്സ്റ്റ് ഫിൽട്ടർ ചെയ്യുന്നതിന്, awk പോലുള്ള ഒരു ടെക്സ്റ്റ് ഫിൽട്ടറിംഗ് ടൂൾ ഉപയോഗിക്കേണ്ടതുണ്ട്. awk-യെ അതിന്റേതായ ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയായി നിങ്ങൾക്ക് ചിന്തിക്കാം. എന്നാൽ awk ഉപയോഗിക്കുന്നതിനുള്ള ഈ ഗൈഡിന്റെ വ്യാപ്തിക്കായി, ഞങ്ങൾ ഇത് ഒരു ലളിതമായ കമാൻഡ് ലൈൻ ഫിൽട്ടറിംഗ് ടൂളായി കവർ ചെയ്യും.

    awk-ന്റെ പൊതുവായ വാക്യഘടന ഇതാണ്:

    # awk 'script' filename
    

    ഇവിടെ script എന്നത് awk-ന് മനസ്സിലാക്കാവുന്ന ഒരു കൂട്ടം കമാൻഡുകൾ ആണ്, അത് ഫയലിന്റെ പേരിലുള്ള ഫയലിൽ എക്സിക്യൂട്ട് ചെയ്യുന്നു.

    ഫയലിൽ നൽകിയിരിക്കുന്ന വരി വായിച്ചുകൊണ്ട് ഇത് പ്രവർത്തിക്കുന്നു, വരിയുടെ ഒരു പകർപ്പ് ഉണ്ടാക്കുന്നു, തുടർന്ന് വരിയിൽ സ്ക്രിപ്റ്റ് എക്സിക്യൂട്ട് ചെയ്യുന്നു. ഫയലിലെ എല്ലാ വരികളിലും ഇത് ആവർത്തിക്കുന്നു.

    സ്ക്രിപ്റ്റ് എന്നത് /pattern/ action എന്ന രൂപത്തിലാണ്, അവിടെ പാറ്റേൺ ഒരു സാധാരണ എക്uസ്uപ്രഷനാണ്, കൂടാതെ നൽകിയിരിക്കുന്ന പാറ്റേൺ ഒരു വരിയിൽ കണ്ടെത്തുമ്പോൾ awk ചെയ്യുന്ന പ്രവർത്തനമാണ്.

    ലിനക്സിൽ Awk ഫിൽട്ടറിംഗ് ടൂൾ എങ്ങനെ ഉപയോഗിക്കാം

    ഇനിപ്പറയുന്ന ഉദാഹരണങ്ങളിൽ, awk-ന്റെ സവിശേഷതകൾക്ക് കീഴിൽ ഞങ്ങൾ മുകളിൽ ചർച്ച ചെയ്ത മെറ്റാ പ്രതീകങ്ങളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കും.

    പാറ്റേൺ നൽകിയിട്ടില്ലാത്തതിനാൽ ചുവടെയുള്ള ഉദാഹരണം ഫയലിലെ /etc/hosts-ലെ എല്ലാ വരികളും പ്രിന്റ് ചെയ്യുന്നു.

    # awk '//{print}'/etc/hosts
    

    ഞാൻ ചുവടെയുള്ള ഉദാഹരണം, ഒരു പാറ്റേൺ localhost നൽകിയിട്ടുണ്ട്, അതിനാൽ awk /etc/hosts ഫയലിൽ ലോക്കൽഹോസ്റ്റ് ഉള്ള ലൈനുമായി പൊരുത്തപ്പെടും.

    # awk '/localhost/{print}' /etc/hosts 
    

    (.) താഴെയുള്ള ഉദാഹരണത്തിൽ ലോക്ക്, ലോക്കൽഹോസ്റ്റ്, ലോക്കൽനെറ്റ് എന്നിവ അടങ്ങിയ സ്ട്രിംഗുകളുമായി പൊരുത്തപ്പെടും.

    അതായത് * l some_single_character c *.

    # awk '/l.c/{print}' /etc/hosts
    

    താഴെയുള്ള ഉദാഹരണത്തിലെന്നപോലെ, ലോക്കൽഹോസ്റ്റ്, ലോക്കൽനെറ്റ്, ലൈനുകൾ, ശേഷിയുള്ള സ്ട്രിംഗുകളുമായി ഇത് പൊരുത്തപ്പെടും:

    # awk '/l*c/{print}' /etc/localhost
    

    (*) അത് കണ്ടെത്താനാകുന്ന ഏറ്റവും ദൈർഘ്യമേറിയ പൊരുത്തം നിങ്ങൾക്ക് ലഭ്യമാക്കാൻ ശ്രമിക്കുന്നുവെന്നും നിങ്ങൾ മനസ്സിലാക്കും.

    ഇത് തെളിയിക്കുന്ന ഒരു കേസ് നോക്കാം, t*t എന്ന സാധാരണ പദപ്രയോഗം എടുക്കുക, അതായത് t എന്ന അക്ഷരത്തിൽ ആരംഭിച്ച് t ൽ അവസാനിക്കുന്ന സ്ട്രിംഗുകൾ പൊരുത്തപ്പെടുത്തുക. ചുവടെയുള്ള വരിയിൽ:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 
    

    നിങ്ങൾ പാറ്റേൺ /t*t/ ഉപയോഗിക്കുമ്പോൾ നിങ്ങൾക്ക് ഇനിപ്പറയുന്ന സാധ്യതകൾ ലഭിക്കും:

    this is t
    this is tecmint
    this is tecmint, where you get t
    this is tecmint, where you get the best good t
    this is tecmint, where you get the best good tutorials, how t
    this is tecmint, where you get the best good tutorials, how tos, guides, t
    this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
    

    കൂടാതെ /t*t/ വൈൽഡ് കാർഡ് പ്രതീകത്തിലെ (*) അവസാന ഓപ്ഷൻ തിരഞ്ഞെടുക്കാൻ awk-നെ അനുവദിക്കുന്നു:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
    

    ഉദാഹരണത്തിന് [al1] എന്ന സെറ്റ് എടുക്കുക, ഇവിടെ awk പ്രതീകം a അല്ലെങ്കിൽ l അല്ലെങ്കിൽ 1 അടങ്ങിയ എല്ലാ സ്uട്രിംഗുകളും പൊരുത്തപ്പെടും. /etc/hosts എന്ന ഫയലിലെ ഒരു വരിയിൽ.

    # awk '/[al1]/{print}' /etc/hosts
    

    അടുത്ത ഉദാഹരണം K അല്ലെങ്കിൽ k തുടർന്ന് T ആരംഭിക്കുന്ന സ്ട്രിംഗുകളുമായി പൊരുത്തപ്പെടുന്നു:

    # awk '/[Kk]T/{print}' /etc/hosts 
    

    awk ഉപയോഗിച്ച് പ്രതീകങ്ങൾ മനസ്സിലാക്കുക:

    1. [0-9] എന്നാൽ ഒരൊറ്റ സംഖ്യയാണ്
    2. [a-z] എന്നാൽ ഒരു ചെറിയ അക്ഷരം പൊരുത്തപ്പെടുത്തുക
    3. [A-Z] എന്നാൽ ഒരൊറ്റ വലിയ അക്ഷരവുമായി പൊരുത്തപ്പെടുന്നു
    4. [a-zA-Z] എന്നാൽ ഒരൊറ്റ അക്ഷരം പൊരുത്തപ്പെടുത്തുക
    5. [a-zA-Z 0-9] എന്നാൽ ഒരൊറ്റ അക്ഷരമോ അക്കമോ പൊരുത്തപ്പെടുത്തുക എന്നാണ് അർത്ഥമാക്കുന്നത്

    ചുവടെയുള്ള ഒരു ഉദാഹരണം നോക്കാം:

    # awk '/[0-9]/{print}' /etc/hosts 
    

    /etc/hosts എന്ന ഫയലിൽ നിന്നുള്ള എല്ലാ വരിയിലും മുകളിലെ ഉദാഹരണത്തിൽ ഒരു സംഖ്യയെങ്കിലും [0-9] അടങ്ങിയിരിക്കുന്നു.

    ചുവടെയുള്ള ഉദാഹരണത്തിൽ നൽകിയിരിക്കുന്ന പാറ്റേണിൽ ആരംഭിക്കുന്ന എല്ലാ വരികളുമായി ഇത് പൊരുത്തപ്പെടുന്നു:

    # awk '/^fe/{print}' /etc/hosts
    # awk '/^ff/{print}' /etc/hosts
    

    നൽകിയിരിക്കുന്ന പാറ്റേണിൽ അവസാനിക്കുന്ന എല്ലാ വരികളുമായി ഇത് പൊരുത്തപ്പെടുന്നു:

    # awk '/ab$/{print}' /etc/hosts
    # awk '/ost$/{print}' /etc/hosts
    # awk '/rs$/{print}' /etc/hosts
    

    അതിനെ പിന്തുടരുന്ന കഥാപാത്രത്തെ അക്ഷരാർത്ഥത്തിൽ എടുക്കാൻ ഇത് നിങ്ങളെ അനുവദിക്കുന്നു, അതായത് അത് അതേപടി പരിഗണിക്കുക.

    ചുവടെയുള്ള ഉദാഹരണത്തിൽ, ആദ്യത്തെ കമാൻഡ് ഫയലിലെ എല്ലാ ലൈനുകളും പ്രിന്റ് ചെയ്യുന്നു, രണ്ടാമത്തെ കമാൻഡ് ഒന്നും പ്രിന്റ് ചെയ്യുന്നില്ല, കാരണം $25.00 ഉള്ള ഒരു ലൈനുമായി പൊരുത്തപ്പെടാൻ ഞാൻ ആഗ്രഹിക്കുന്നു, പക്ഷേ എസ്uകേപ്പ് ക്യാരക്ടറൊന്നും ഉപയോഗിച്ചിട്ടില്ല.

    $അതേപടി വായിക്കാൻ ഒരു എസ്കേപ്പ് പ്രതീകം ഉപയോഗിച്ചതിനാൽ മൂന്നാമത്തെ കമാൻഡ് ശരിയാണ്.

    # awk '//{print}' deals.txt
    # awk '/$25.00/{print}' deals.txt
    # awk '/\$25.00/{print}' deals.txt
    

    സംഗ്രഹം

    awk കമാൻഡ് ലൈൻ ഫിൽട്ടറിംഗ് ടൂൾ കൊണ്ട് അത്രയൊന്നും അല്ല, awk-ന്റെ അടിസ്ഥാന പ്രവർത്തനങ്ങൾക്ക് മുകളിലുള്ള ഉദാഹരണങ്ങൾ. അടുത്ത ഭാഗങ്ങളിൽ, awk-ന്റെ സങ്കീർണ്ണമായ സവിശേഷതകൾ എങ്ങനെ ഉപയോഗിക്കാമെന്നതിനെക്കുറിച്ച് ഞങ്ങൾ മുന്നോട്ട് പോകും. വായിച്ചതിനും എന്തെങ്കിലും കൂട്ടിച്ചേർക്കലുകൾക്കും വ്യക്തതകൾക്കും നന്ദി, അഭിപ്രായ വിഭാഗത്തിൽ ഒരു അഭിപ്രായം പോസ്റ്റ് ചെയ്യുക.