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 matrika strarr> 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