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 hodnotu
text>vitajte na stránke techcodeview.com. - The
readarray>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úboru
strarr>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>