logo

Bash Scripting – Split String

V tomto článku budeme diskutovať o tom, ako rozdeliť reťazce v bash skripte.

Rozdelenie jedného reťazca na viacero reťazcov sa nazýva rozdelenie reťazcov. Mnoho programovacích jazykov má vstavanú funkciu na vykonávanie rozdeľovania reťazcov, ale v bash neexistuje žiadna vstavaná funkcia, ktorá by to umožňovala. Existujú rôzne metódy na vykonanie rozdeleného reťazca v bash. Pozrime sa na všetky metódy jeden po druhom s príkladmi.



Metóda 1: Použitie premennej IFS

$IFS(Internal Field Separator) je špeciálna premenná shellu. Slúži na priradenie oddeľovača (sekvencie jedného alebo viacerých znakov, na základe ktorých chceme reťazec rozdeliť). Oddeľovačom môže byť ľubovoľná hodnota alebo znak ako „ “, „ “, „-“ atď. Po priradení hodnoty do premennej $IFS je potrebné prečítať hodnotu reťazca. Reťazec môžeme čítať pomocou možností „-r“ a „-a“.

  • '-r': Číta spätnú lomku () ako znak namiesto znaku escape
  • „-a“: Používa sa na uloženie rozdelených slov do premennej poľa, ktorá je deklarovaná za voľbou -a.

Príklad 1: Rozdeľte reťazec medzerou

kód:



#!/bin/bash # String text='Welcome to techcodeview.com' # Set space as the delimiter IFS=' ' # Read the split words into an array # based on space delimiter read -ra newarr <<< '$text' # Print each value of the array by using # the loop for val in '${newarr[@]}'; do echo '$val' done>

Výkon:

r v c programovaní
Welcome to techcodeview.com>

Príklad 2: Rozdelenie reťazca podľa symbolu

Rozdelenie reťazca pomocou symbolu @.



kód:

#!/bin/bash #String text='Welcome@[email protected]@!!' # Set @ as the delimiter IFS='@' # Read the split words into an array # based on space delimiter read -ra newarr <<< '$text' # Print each value of the array by # using the loop for val in '${newarr[@]}'; do echo '$val' done>

Výkon:

Welcome to techcodeview.com !!>

Metóda 2: Bez použitia premennej IFS

V tejto metóde sa príkaz readarray s voľbou -d používa na rozdelenie údajov reťazca. „-d“: táto možnosť funguje ako premenná IFS na definovanie oddeľovača.

Príklad 1: Rozdelenie reťazca medzerou

kód:

#!/bin/bash # Read the main string text='Welcome to techcodeview.com' # Split the string by space readarray -d ' ' -t strarr <<< '$text' # Print each value of the array by # using loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done>

Teraz sa pozrime, ako sa skript správa:

  • Skript nastavuje hodnotutext>vitajte na stránke techcodeview.com.
  • Thereadarray>príkaz rozdelí reťazec do poľa pomocou medzery ako oddeľovača, výsledkom čoho je polestrarr>obsahujúce nasledujúce prvky: Vitajte na, techcodeview.com.
  • Cyklus for iteruje cez každý prvok súborustrarr>pole.
  • Vytlačí každý prvok jeden po druhom na samostatné riadky.

Výkon:

Welcome to techcodeview.com>

Príklad 2: Rozdelenie pomocou a dvojbodka ako a oddeľovač

kód:

#!/bin/bash # Read the main string text='Welcome:to:techcodeview.com' # Split the string based on the delimiter, ':' readarray -d : -t strarr <<< '$text' # Print each value of the array by using # loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done>

Výkon:

Welcome to techcodeview.com>

Metóda 3: Rozdeľte reťazec pomocou viacznakového oddeľovača

V tejto metóde sa premenná používa na ukladanie údajov reťazca a iná premenná sa používa na ukladanie údajov oddeľovača viacerých znakov. Premenná poľa je tiež deklarovaná na uloženie rozdeleného reťazca.

kód:

# Define the string to split text='HelloRomy HelloPushkar HelloNikhil HelloRinkle' # store multi-character delimiter delimiter='Hello' # Concatenate the delimiter with the # main string string=$text$delimiter # Split the text based on the delimiter newarray=() while [[ $string ]]; do newarray+=( '${string%%'$delimiter'*}' ) string=${string#*'$delimiter'} done # Print the words after the split for value in ${newarray[@]} do echo '$value ' done>

Výkon:

Romy Pushkar Nikhil Rinkle>