Bash Scripting – Split String

În acest articol, vom discuta despre cum să împărțim șirurile într-un script bash.

Împărțirea unui singur șir în mai multe șiruri se numește împărțire șiruri. Multe limbaje de programare au o funcție încorporată pentru a efectua împărțirea șirurilor, dar nu există nicio funcție încorporată în bash pentru a face acest lucru. Există diferite metode de a efectua împărțirea șirului în bash. Să vedem toate metodele una câte una cu exemple.

Metoda 1: Utilizarea variabilei IFS

$IFS(Internal Field Separator) este o variabilă shell specială. Este folosit pentru a atribui delimitatorul (o secvență de unul sau mai multe caractere pe baza căreia dorim să împărțim șirul). Orice valoare sau caracter precum „ ”, „ ”, „-” etc. poate fi delimitator. După atribuirea valorii variabilei $IFS, valoarea șirului trebuie citită. Putem citi șirul folosind opțiunile „-r” și „-a”.

  • „-r”: Citea backslash () ca un caracter în loc de un caracter de escape
  • „-a”: este folosit pentru a stoca cuvintele împărțite într-o variabilă matrice care este declarată după opțiunea -a.

Exemplul 1: Împărțiți șirul prin spațiu

Cod:

#!/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 

Ieșire:

Welcome to techcodeview.com 

Exemplul 2: Împărțiți șirul cu un simbol

Împărțire șir folosind simbolul @.

Cod:

#!/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 

Ieșire:

Welcome to techcodeview.com !! 

Metoda 2: Fără a utiliza variabila IFS

În această metodă, comanda readarray cu opțiunea -d este utilizată pentru a împărți șirul de date. „-d”: această opțiune acționează ca o variabilă IFS pentru a defini delimitatorul.

Exemplul 1: Împărțiți șirul după spațiu

Cod:

#!/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 

Acum, să vedem cum se comportă scriptul:

  • Scriptul stabilește valoarea lui text> la Bun venit pe techcodeview.com.
  • The readarray> comanda împarte șirul într-o matrice folosind spațiu ca delimitator, rezultând matrice strarr> conținând următoarele elemente: Bine ați venit, la, techcodeview.com.
  • Bucla for iterează peste fiecare element al strarr> matrice.
  • Tipărește fiecare element unul câte unul pe linii separate.

Ieșire:

Welcome to techcodeview.com 

Exemplul 2: Split folosind A colon ca A delimitator

Cod:

#!/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 

Ieșire:

Welcome to techcodeview.com 

Metoda 3: Împărțiți șirul cu un delimitator cu mai multe caractere

În această metodă, o variabilă este utilizată pentru a stoca date șir, iar o altă variabilă este utilizată pentru a stoca date delimitare cu mai multe caractere. De asemenea, este declarată o variabilă matrice pentru a stoca șirul împărțit.

Cod:

# 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 

Ieșire:

Romy Pushkar Nikhil Rinkle