Bash Scripting - Split String
Tässä artikkelissa keskustelemme merkkijonojen jakamisesta bash-skriptissä.
Yhden merkkijonon jakamista useiksi merkkijonoiksi kutsutaan merkkijonojen jakamiseksi. Monissa ohjelmointikielissä on sisäänrakennettu toiminto merkkijonojen jakamiseen, mutta bashissa ei ole sisäänrakennettua toimintoa sitä varten. On olemassa useita menetelmiä jaetun merkkijonon suorittamiseen bashissa. Katsotaanpa kaikki menetelmät yksitellen esimerkkien kanssa.
Tapa 1: IFS-muuttujan käyttäminen
$IFS (Internal Field Separator) on erityinen kuorimuuttuja. Sitä käytetään erottimen määrittämiseen (yhden tai useamman merkin sarja, jonka perusteella haluamme jakaa merkkijonon). Mikä tahansa arvo tai merkki, kuten ' ', ' ', '-' jne., voi olla erotin. Kun arvo on annettu $IFS-muuttujalle, merkkijonon arvo on luettava. Voimme lukea merkkijonoa '-r' ja '-a' vaihtoehdoilla.
- '-r': Se lukee kenoviivan () merkiksi pakomerkin sijaan
- '-a': Sitä käytetään tallentamaan jaetut sanat taulukkomuuttujaan, joka ilmoitetaan valitsimen -a jälkeen.
Esimerkki 1: Jaa merkkijono välilyönnillä
Koodi:
#!/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 Lähtö:
Welcome to techcodeview.com
Esimerkki 2: Jaa merkkijono symbolilla
Merkkijono jaetaan @-symbolilla.
Koodi:
#!/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
Lähtö:
Welcome to techcodeview.com !!
Tapa 2: Käyttämättä IFS-muuttujaa
Tässä menetelmässä readarray-komentoa, jossa on optio -d, käytetään merkkijonotietojen jakamiseen. '-d': tämä vaihtoehto toimii IFS-muuttujana määrittämään erottimen.
Esimerkki 1: Jaa merkkijono välilyönnillä
Koodi:
#!/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 Katsotaan nyt, miten skripti toimii:
- Skripti asettaa arvon
text>Tervetuloa techcodeview.com:hon. - The
readarray>komento jakaa merkkijonon taulukoksi käyttämällä välilyöntiä erottimena, jolloin tuloksena on taulukkostrarr>sisältää seuraavat elementit: Tervetuloa techcodeview.com:hon. - For-silmukka toistuu jokaisen elementin yli
strarr>joukko. - Se tulostaa jokaisen elementin yksitellen eri riveille.
Lähtö:
Welcome to techcodeview.com
Esimerkki 2: Jaa käyttämällä a kaksoispiste as a erotin
Koodi:
#!/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 Lähtö:
Welcome to techcodeview.com
Tapa 3: Jaa merkkijono monimerkkiisellä erottimella
Tässä menetelmässä muuttujaa käytetään merkkijonotietojen tallentamiseen ja toista muuttujaa monimerkkisen erotindatan tallentamiseen. Taulukkomuuttuja on myös ilmoitettu tallentamaan jaetun merkkijonon.
Koodi:
# 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 Lähtö:
Romy Pushkar Nikhil Rinkle