ബാഷിലെ ബ്രേക്കിംഗ് ഡൗൺ സ്ട്രിംഗ് മാനിപുലേഷൻ
ഷെൽ സ്ക്രിപ്റ്റുകളിൽ പ്രവർത്തിക്കുമ്പോൾ, ഒരു ഡിലിമിറ്ററിനെ അടിസ്ഥാനമാക്കി ഒരു സ്ട്രിംഗ് വിഭജിക്കുക എന്നതാണ് ഒരു പൊതു ചുമതല. ഉദാഹരണത്തിന്, അർദ്ധവിരാമങ്ങളാൽ വേർതിരിച്ച ഇമെയിൽ വിലാസങ്ങൾ അടങ്ങിയ ഒരു സ്ട്രിംഗ് പരിഗണിക്കുക. നിങ്ങൾക്ക് ഓരോ ഇമെയിലും വ്യക്തിഗതമായി പ്രോസസ്സ് ചെയ്യണമെങ്കിൽ, ഈ സ്ട്രിംഗ് എങ്ങനെ വിഭജിക്കാം എന്ന് മനസ്സിലാക്കേണ്ടത് അത്യാവശ്യമാണ്. ബാഷിൽ ഇത് നേടുന്നതിനുള്ള വ്യത്യസ്ത രീതികളിലൂടെ ഈ ലേഖനം നിങ്ങളെ നയിക്കും.
`tr` കമാൻഡ് ഉപയോഗിക്കുന്നതും ഇൻ്റേണൽ ഫീൽഡ് സെപ്പറേറ്റർ (IFS) കൈകാര്യം ചെയ്യുന്നതും പോലുള്ള പരിഹാരങ്ങൾ ഞങ്ങൾ പര്യവേക്ഷണം ചെയ്യും. അവസാനത്തോടെ, നിങ്ങൾക്ക് സ്ട്രിംഗ് സ്പ്ലിറ്റിംഗ് കാര്യക്ഷമമായി കൈകാര്യം ചെയ്യാനും IFS അതിൻ്റെ ഡിഫോൾട്ട് മൂല്യത്തിലേക്ക് പുനഃസജ്ജമാക്കാനും കഴിയും. നിങ്ങളുടെ ബാഷ് സ്ക്രിപ്റ്റിംഗ് ജോലികൾ ലളിതമാക്കാം!
| കമാൻഡ് | വിവരണം |
|---|---|
| tr | പ്രതീകങ്ങൾ വിവർത്തനം ചെയ്യുകയോ ഇല്ലാതാക്കുകയോ ചെയ്യുന്നു. സ്ട്രിംഗ് വിഭജിക്കാൻ ഒരു ന്യൂലൈൻ പ്രതീകം ഉപയോഗിച്ച് അർദ്ധവിരാമം മാറ്റിസ്ഥാപിക്കാൻ ഇവിടെ ഉപയോഗിക്കുന്നു. |
| IFS | ഇൻ്റേണൽ ഫീൽഡ് സെപ്പറേറ്റർ, ബാഷ് സ്ക്രിപ്റ്റുകളിലെ ഒരു പ്രത്യേക ഡിലിമിറ്ററിനെ അടിസ്ഥാനമാക്കി സ്ട്രിംഗുകൾ വിഭജിക്കാൻ ഉപയോഗിക്കുന്നു. |
| read -r -a | ഇൻപുട്ടിൻ്റെ ഒരു വരി വായിക്കുകയും അതിനെ ഒരു അറേ ആയി വിഭജിക്കുകയും ചെയ്യുന്നു. -r ഓപ്ഷൻ ബാക്ക്സ്ലാഷുകളെ എസ്കേപ്പ് പ്രതീകങ്ങളായി വ്യാഖ്യാനിക്കുന്നതിൽ നിന്ന് തടയുന്നു. |
| echo | സ്റ്റാൻഡേർഡ് ഔട്ട്പുട്ടിലേക്ക് ടെക്സ്റ്റ് പ്രിൻ്റ് ചെയ്യുന്നു. സ്പ്ലിറ്റ് സ്ട്രിംഗ് ഘടകങ്ങൾ പ്രദർശിപ്പിക്കാൻ ഉപയോഗിക്കുന്നു. |
| split | ഒരു നിർദ്ദിഷ്ട ഡിലിമിറ്ററിനെ അടിസ്ഥാനമാക്കി ഒരു സ്ട്രിംഗിനെ സ്ട്രിംഗുകളുടെ പട്ടികയായി വിഭജിക്കുന്ന ഒരു പേൾ ഫംഗ്ഷൻ. |
| foreach | മൂല്യങ്ങളുടെ ഒരു പട്ടികയിൽ ആവർത്തിക്കുന്ന ഒരു പേൾ ലൂപ്പ് ഘടന. |
ബാഷ് സ്ട്രിംഗ് സ്പ്ലിറ്റിംഗ് ടെക്നിക്കുകൾ മനസ്സിലാക്കുന്നു
ആദ്യത്തെ ബാഷ് സ്ക്രിപ്റ്റ് എങ്ങനെ ഒരു സ്ട്രിംഗ് വിഭജിക്കാം എന്ന് കാണിക്കുന്നു tr കമാൻഡ്. ഇവിടെ, ഞങ്ങൾ ഒരു സ്ട്രിംഗ് നിർവചിക്കുന്നു IN="bla@some.com;john@home.com" ഉപയോഗിക്കുകയും ചെയ്യുക echo അതുമായി ബന്ധപെട്ടു tr അർദ്ധവിരാമ ഡീലിമിറ്റർ ഒരു പുതിയ ലൈൻ പ്രതീകത്തിലേക്ക് വിവർത്തനം ചെയ്യാൻ. ഇത് ഫലപ്രദമായി സ്ട്രിംഗിനെ വ്യക്തിഗത വരികളായി തകർക്കുന്നു. ദി for ലൂപ്പ് പിന്നീട് ഓരോ വരിയിലും ആവർത്തിക്കുന്നു, ചതുര ബ്രാക്കറ്റിനുള്ളിൽ വിലാസങ്ങൾ അച്ചടിക്കുന്നു. ഈ രീതി ലളിതമാണ് കൂടാതെ സ്ട്രിംഗുകൾ കൈകാര്യം ചെയ്യുന്നതിനായി Unix കമാൻഡുകളുടെ ശക്തമായ ടെക്സ്റ്റ് പ്രോസസ്സിംഗ് കഴിവുകൾ പ്രയോജനപ്പെടുത്തുന്നു.
മറ്റൊരു രീതി ക്രമീകരിക്കുന്നത് ഉൾപ്പെടുന്നു Internal Field Separator (IFS). താൽക്കാലികമായി സജ്ജീകരിക്കുന്നതിലൂടെ IFS ഒരു അർദ്ധവിരാമത്തിലേക്ക്, നമുക്ക് സ്ട്രിംഗ് ഒരു അറേ ആയി വിഭജിക്കാം. ഞങ്ങൾ ഒറിജിനൽ സംരക്ഷിക്കുന്നു IFS വരെ OIFS അത് പരിഷ്കരിക്കുന്നതിന് മുമ്പ്, നമുക്ക് അത് പിന്നീട് പുനഃസ്ഥാപിക്കാമെന്ന് ഉറപ്പാക്കുക. ദി read -r -a കമാൻഡ് ഇൻപുട്ട് സ്ട്രിംഗ് എന്ന് വിളിക്കപ്പെടുന്ന ഒരു അറേയിലേക്ക് വായിക്കുന്നു mails2, പരിഷ്കരിച്ചതിനെ അടിസ്ഥാനമാക്കി അതിനെ വിഭജിക്കുന്നു IFS. പ്രോസസ്സ് ചെയ്ത ശേഷം, ഒറിജിനൽ IFS പുനഃസ്ഥാപിച്ചിരിക്കുന്നു. ഈ സമീപനം ബാഷിലെ സ്ട്രിംഗ് സ്പ്ലിറ്റിംഗ് കൈകാര്യം ചെയ്യുന്നതിനുള്ള കൂടുതൽ പ്രോഗ്രമാറ്റിക് മാർഗം നൽകുന്നു, ഇത് കൂടുതൽ കൃത്രിമത്വത്തിനായി അറേകൾ ഉപയോഗിക്കാൻ ഞങ്ങളെ അനുവദിക്കുന്നു.
ഒരു ഡിലിമിറ്ററിൽ സ്ട്രിംഗുകൾ വിഭജിക്കാൻ ബാഷ് ഉപയോഗിക്കുന്നു
ബാഷ് സ്ക്രിപ്റ്റ്
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Split string using 'tr' and iteratemails=$(echo $IN | tr ";" "\n")for addr in $mails; doecho "> [$addr]"done# Output:# > [bla@some.com]# > [john@home.com]
IFS ഉപയോഗിച്ച് ബാഷിൽ ഒരു സ്ട്രിംഗ് വിഭജിക്കുന്നു
ബാഷ് സ്ക്രിപ്റ്റ്
#!/usr/bin/env bash# Input stringIN="bla@some.com;john@home.com"# Save the original IFSOIFS=$IFS# Set IFS to semicolonIFS=';'# Split string into an arrayread -r -a mails2 <<< "$IN"# Restore the original IFSIFS=$OIFS# Iterate over the arrayfor x in "${mails2[@]}"; doecho "> [$x]"done# Output:# > [bla@some.com]# > [john@home.com]
സ്ട്രിംഗ് സ്പ്ലിറ്റിംഗിനായി പൈത്തൺ ഉപയോഗിക്കുന്നു
പൈത്തൺ സ്ക്രിപ്റ്റ്
#!/usr/bin/env python3# Input stringIN = "bla@some.com;john@home.com"# Split string by semicolonmails = IN.split(';')# Iterate and print each elementfor addr in mails:print(f"> [{addr}]")# Output:# > [bla@some.com]# > [john@home.com]
ഒരു സ്ട്രിംഗ് പിളർത്താൻ പേൾ ഉപയോഗിക്കുന്നു
പേൾ സ്ക്രിപ്റ്റ്
#!/usr/bin/env perluse strict;use warnings;# Input stringmy $IN = "bla@some.com;john@home.com";# Split string by semicolonmy @mails = split(';', $IN);# Iterate and print each elementforeach my $addr (@mails) {print "> [$addr]\n";}# Output:# > [bla@some.com]# > [john@home.com]
ബാഷിലെ വിപുലമായ സ്ട്രിംഗ് സ്പ്ലിറ്റിംഗ് ടെക്നിക്കുകൾ
ബാഷിൽ സ്ട്രിംഗുകൾ വിഭജിക്കാനുള്ള മറ്റൊരു ശക്തമായ രീതി ഉപയോഗിക്കുന്നത് ഉൾപ്പെടുന്നു awk കമാൻഡ്. awk പാറ്റേൺ സ്കാനിംഗിനും പ്രോസസ്സിംഗിനുമായി രൂപകൽപ്പന ചെയ്ത ഒരു ബഹുമുഖ കമാൻഡ്-ലൈൻ യൂട്ടിലിറ്റിയാണ്. ഇഷ്ടാനുസൃത ഫീൽഡ് സെപ്പറേറ്ററുകൾ നിർവചിക്കാൻ ഇത് ഞങ്ങളെ അനുവദിക്കുന്നതിനാൽ സ്ട്രിംഗുകൾ വിഭജിക്കുന്നതിന് ഇത് പ്രത്യേകിച്ചും ഉപയോഗപ്രദമാകും. ഉദാഹരണത്തിന്, നമുക്ക് ഉപയോഗിക്കാം awk -F";" '{print $1, $2}' അർദ്ധവിരാമ ഡിലിമിറ്ററിനെ അടിസ്ഥാനമാക്കി ഒരു സ്ട്രിംഗ് വിഭജിച്ച് വ്യക്തിഗത ഘടകങ്ങൾ പ്രിൻ്റ് ചെയ്യാൻ. ഈ രീതി വളരെ വഴക്കമുള്ളതും കൂടുതൽ സങ്കീർണ്ണമായ സ്ട്രിംഗ് മാനിപുലേഷൻ ടാസ്ക്കുകൾ കൈകാര്യം ചെയ്യാനും കഴിയും, ഇത് ഒരു ബാഷ് പ്രോഗ്രാമറുടെ ടൂൾകിറ്റിലെ വിലയേറിയ ഉപകരണമാക്കി മാറ്റുന്നു.
കൂടാതെ, ദി cut ഡിലിമിറ്ററുകളെ അടിസ്ഥാനമാക്കി സ്ട്രിംഗുകൾ വിഭജിക്കാൻ കമാൻഡ് ഉപയോഗപ്പെടുത്താം. ദി cut ഇൻപുട്ട് ഡാറ്റയുടെ ഓരോ വരിയിൽ നിന്നും വിഭാഗങ്ങൾ എക്സ്ട്രാക്റ്റുചെയ്യുന്നതിന് സാധാരണയായി കമാൻഡ് ഉപയോഗിക്കുന്നു. കൂടെ ഒരു ഡിലിമിറ്റർ വ്യക്തമാക്കുന്നതിലൂടെ -d ഓപ്ഷൻ കൂടാതെ ഫീൽഡുകൾ തിരഞ്ഞെടുക്കുന്നു -f ഓപ്ഷൻ, നമുക്ക് ഒരു സ്ട്രിംഗിൻ്റെ ഭാഗങ്ങൾ കാര്യക്ഷമമായി വിഭജിച്ച് വേർതിരിച്ചെടുക്കാൻ കഴിയും. ഉദാഹരണത്തിന്, ഉപയോഗിക്കുന്നത് echo $IN | cut -d';' -f1 ഇൻപുട്ട് സ്ട്രിംഗിൽ നിന്ന് ആദ്യത്തെ ഇമെയിൽ വിലാസം വേർതിരിച്ചെടുക്കും. ഈ നൂതന രീതികൾ ബാഷിലെ സ്ട്രിംഗ് മാനിപ്പുലേഷൻ ടാസ്ക്കുകൾക്ക് കൂടുതൽ നിയന്ത്രണവും കൃത്യതയും നൽകുന്നു.
ബാഷിലെ സ്ട്രിംഗ് സ്പ്ലിറ്റിംഗിനെക്കുറിച്ചുള്ള പൊതുവായ ചോദ്യങ്ങളും ഉത്തരങ്ങളും
- ബാഷിലെ ഒരു ഡിലിമിറ്ററിൽ ഒരു സ്ട്രിംഗ് എങ്ങനെ വിഭജിക്കാം?
- നിങ്ങൾക്ക് ഉപയോഗിക്കാം IFS വേരിയബിൾ അല്ലെങ്കിൽ കമാൻഡുകൾ പോലുള്ളവ tr, awk, ഒപ്പം cut ഒരു ഡിലിമിറ്ററിൽ സ്ട്രിംഗുകൾ വിഭജിക്കാൻ.
- എന്താണ് IFS ബാഷിലെ വേരിയബിൾ?
- ദി IFS (ഇൻ്റേണൽ ഫീൽഡ് സെപ്പറേറ്റർ) എന്നത് ഇൻപുട്ട് ടെക്സ്റ്റ് പദങ്ങളിലേക്കോ ടോക്കണുകളിലേക്കോ വിഭജിക്കാൻ ഉപയോഗിക്കുന്ന പ്രതീകം(കൾ) നിർവചിക്കുന്ന ഒരു പ്രത്യേക വേരിയബിളാണ്.
- എനിക്ക് എങ്ങനെ റീസെറ്റ് ചെയ്യാം IFS അതിൻ്റെ ഡിഫോൾട്ട് മൂല്യത്തിലേക്ക് വേരിയബിൾ?
- ഒറിജിനൽ സംരക്ഷിക്കുക IFS അത് മാറ്റുന്നതിന് മുമ്പ് മൂല്യം, പ്രോസസ്സ് ചെയ്തതിന് ശേഷം അത് പുനഃസ്ഥാപിക്കുക: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- എന്താണ് ചെയ്യുന്നത് tr സ്ട്രിംഗ് വിഭജനത്തിൽ കമാൻഡ് ചെയ്യണോ?
- ദി tr കമാൻഡ് പ്രതീകങ്ങൾ വിവർത്തനം ചെയ്യുന്നു അല്ലെങ്കിൽ ഇല്ലാതാക്കുന്നു. ഒരു സ്ട്രിംഗ് വിഭജിക്കാൻ ഇതിന് ഡിലിമിറ്ററുകൾക്ക് പകരം പുതിയ ലൈനുകൾ നൽകാനാകും: echo $IN | tr ";" "\n".
- ബാഷ് ഉപയോഗിച്ച് എനിക്ക് ഒരു സ്ട്രിംഗ് ഒരു അറേ ആയി വിഭജിക്കാൻ കഴിയുമോ?
- അതെ, മാറ്റുന്നതിലൂടെ IFS വേരിയബിളും ഉപയോഗിക്കുന്നതും read -r -a, നിങ്ങൾക്ക് ഒരു സ്ട്രിംഗ് ഒരു അറേ ആയി വിഭജിക്കാം: read -r -a array <<< "$string".
- എന്താണ് awk കമാൻഡ് ഉപയോഗിച്ചത്?
- awk പാറ്റേൺ സ്കാനിംഗിനും പ്രോസസ്സിംഗിനുമുള്ള ഒരു കമാൻഡ്-ലൈൻ യൂട്ടിലിറ്റിയാണ്. ഇഷ്ടാനുസൃത ഫീൽഡ് സെപ്പറേറ്ററുകൾ നിർവചിക്കുന്നതിലൂടെ ഇതിന് സ്ട്രിംഗുകൾ വിഭജിക്കാൻ കഴിയും.
- എങ്ങനെ ചെയ്യുന്നു cut കമാൻഡ് വർക്ക്?
- ദി cut കമാൻഡ് ഇൻപുട്ടിൻ്റെ ഓരോ വരിയിൽ നിന്നും വിഭാഗങ്ങൾ എക്സ്ട്രാക്റ്റ് ചെയ്യുന്നു. ഒരു ഡിലിമിറ്റർ വ്യക്തമാക്കി ഫീൽഡുകൾ തിരഞ്ഞെടുത്ത് ഇതിന് സ്ട്രിംഗുകൾ വിഭജിക്കാം: echo $string | cut -d';' -f1.
- എന്തിനാണ് ഉപയോഗിക്കുന്നത് IFS സ്ട്രിംഗ് വിഭജനത്തിന് സഹായകമാണോ?
- ഉപയോഗിക്കുന്നത് IFS സ്ട്രിംഗുകൾ വിഭജിക്കാൻ ഇഷ്ടാനുസൃത ഡിലിമിറ്ററുകൾ നിർവചിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു, ഇത് വ്യത്യസ്ത ഇൻപുട്ട് ഫോർമാറ്റുകൾക്ക് ബഹുമുഖമാക്കുന്നു.
- ബാഷിൽ ഒന്നിലധികം ഡിലിമിറ്ററുകൾ ഉപയോഗിച്ച് ഒരു സ്ട്രിംഗ് വിഭജിക്കാൻ കഴിയുമോ?
- അതെ, നിങ്ങൾക്ക് ഒരു കോമ്പിനേഷൻ ഉപയോഗിക്കാം tr ഒപ്പം awk ഒന്നിലധികം ഡിലിമിറ്ററുകൾ കൈകാര്യം ചെയ്യാൻ.
- എനിക്ക് ഉപയോഗിക്കാമോ sed ബാഷിൽ സ്ട്രിംഗ് പിളർന്നതിന്?
- അതേസമയം sed പ്രാഥമികമായി ഒരു സ്ട്രീം എഡിറ്ററാണ്, ഇത് പോലെയുള്ള മറ്റ് കമാൻഡുകളുമായി സംയോജിപ്പിക്കാൻ കഴിയും awk പരോക്ഷമായി ചരടുകൾ വിഭജിക്കാൻ.
ബാഷിലെ സ്ട്രിംഗ് സ്പ്ലിറ്റിംഗിനെക്കുറിച്ചുള്ള അന്തിമ ചിന്തകൾ
ബാഷിലെ സ്ട്രിംഗ് കൃത്രിമത്വം മാസ്റ്ററിംഗ് നിങ്ങളുടെ സ്ക്രിപ്റ്റിംഗ് കാര്യക്ഷമതയെ ഗണ്യമായി മെച്ചപ്പെടുത്തും. ഉപയോഗിച്ചാലും IFS ലളിതമായ ഡിലിമിറ്ററുകൾ അല്ലെങ്കിൽ കൂടുതൽ വിപുലമായ ഉപകരണങ്ങൾക്കായി tr ഒപ്പം awk, ഫലപ്രദമായ ബാഷ് പ്രോഗ്രാമിംഗിന് ഈ സാങ്കേതിക വിദ്യകൾ അത്യാവശ്യമാണ്. എല്ലായ്പ്പോഴും യഥാർത്ഥമായത് പുനഃസ്ഥാപിക്കാൻ ഓർക്കുക IFS നിങ്ങളുടെ സ്ക്രിപ്റ്റുകളിൽ അപ്രതീക്ഷിതമായ പെരുമാറ്റം ഒഴിവാക്കാൻ. ഈ രീതികൾ ഉപയോഗിച്ച്, നിങ്ങളുടെ ബാഷ് സ്ക്രിപ്റ്റുകളിൽ നിങ്ങൾക്ക് വിപുലമായ സ്ട്രിംഗ് പ്രോസസ്സിംഗ് ജോലികൾ കൈകാര്യം ചെയ്യാൻ കഴിയും.