Bash Scripting – Split String
V tem članku bomo razpravljali o tem, kako razdeliti nize v skriptu bash.
Razdelitev enega niza na več nizov se imenuje razdelitev nizov. Številni programski jeziki imajo vgrajeno funkcijo za izvajanje delitve nizov, vendar v bash ni vgrajene funkcije za to. Obstajajo različne metode za izvedbo razdelitve niza v bash. Oglejmo si vse metode eno za drugo s primeri.
1. način: uporaba spremenljivke IFS
$IFS (notranji ločilnik polj) je posebna spremenljivka lupine. Z njim določimo ločilo (zaporedje enega ali več znakov, na podlagi katerega želimo razdeliti niz). Katera koli vrednost ali znak, kot je ' ', ' ', '-' itd., je lahko ločilo. Po dodelitvi vrednosti spremenljivki $IFS je treba prebrati vrednost niza. Niz lahko beremo z možnostma '-r' in '-a'.
- '-r': Prebral je poševnico nazaj () kot znak namesto ubežnega znaka
- '-a': Uporablja se za shranjevanje razdeljenih besed v spremenljivko polja, ki je deklarirana za možnostjo -a.
Primer 1: Razdelite niz s presledkom
Koda:
#!/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 Izhod:
Welcome to techcodeview.com
Primer 2: Razdelitev niza s simbolom
Niz je razdeljen s simbolom @.
Koda:
#!/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
Izhod:
Welcome to techcodeview.com !!
2. način: Brez uporabe spremenljivke IFS
Pri tej metodi se ukaz readarray z možnostjo -d uporablja za razdelitev podatkov niza. '-d': ta možnost deluje kot spremenljivka IFS za določanje ločila.
Primer 1: Razdeli niz s presledkom
Koda:
#!/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 Zdaj pa poglejmo, kako se skript obnaša:
- Skript nastavi vrednost
text>do Dobrodošli na techcodeview.com. - The
readarray>ukaz razdeli niz v matriko z uporabo presledka kot ločila, rezultat pa je matrikastrarr>ki vsebuje naslednje elemente: Dobrodošli, na, techcodeview.com. - Zanka for ponovi vsak element v
strarr>niz. - Vsak element enega za drugim natisne v ločene vrstice.
Izhod:
Welcome to techcodeview.com
Primer 2: Razdelite z uporabo a debelo črevo kot a ločilo
Koda:
#!/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 Izhod:
Welcome to techcodeview.com
3. način: Razdelite niz z večznakovnim ločilom
Pri tej metodi se spremenljivka uporablja za shranjevanje podatkov o nizu, druga spremenljivka pa za shranjevanje podatkov o ločilih z več znaki. Za shranjevanje razdeljenega niza je deklarirana tudi spremenljivka polja.
Koda:
# 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 Izhod:
Romy Pushkar Nikhil Rinkle