Bash Scripting – Split streng

I denne artikel vil vi diskutere, hvordan man opdeler strenge i et bash-script.

At opdele en enkelt streng i flere strenge kaldes strengopdeling. Mange programmeringssprog har en indbygget funktion til at udføre strengopdeling, men der er ingen indbygget funktion i bash til at gøre det. Der er forskellige metoder til at udføre split streng i bash. Lad os se alle metoder en efter en med eksempler.

Metode 1: Brug af IFS-variabel

$IFS(Internal Field Separator) er en speciel skalvariabel. Det bruges til at tildele afgrænsningstegnet (en sekvens af et eller flere tegn, baseret på hvilke vi ønsker at opdele strengen). Enhver værdi eller tegn som ' ', ' ', '-' osv. kan være afgrænsningstegnet. Efter at have tildelt værdien til $IFS-variablen, skal strengværdien læses. Vi kan læse streng ved at bruge '-r' og '-a' muligheder.

  • '-r': Den læste omvendt skråstreg () som et tegn i stedet for et escape-tegn
  • '-a': Det bruges til at gemme de opdelte ord i en array-variabel, der erklæres efter -a-indstillingen.

Eksempel 1: Del strengen med mellemrum

Kode:

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

Produktion:

Welcome to techcodeview.com 

Eksempel 2: Opdel streng med et symbol

Strengopdeling ved hjælp af @-symbolet.

Kode:

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

Produktion:

Welcome to techcodeview.com !! 

Metode 2: Uden at bruge IFS-variabel

I denne metode bruges readarray-kommando med muligheden -d til at opdele strengdataene. '-d': denne mulighed fungerer som en IFS-variabel til at definere afgrænseren.

Eksempel 1: Opdel streng efter mellemrum

Kode:

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

Lad os nu se, hvordan scriptet opfører sig:

  • Scriptet sætter værdien af text> til Velkommen til techcodeview.com.
  • Det readarray> kommandoen opdeler strengen i et array ved at bruge mellemrum som afgrænsningstegn, hvilket resulterer i arrayet strarr> indeholdende følgende elementer: Velkommen til techcodeview.com.
  • For-løkken itererer over hvert element i strarr> array.
  • Den udskriver hvert element et efter et på separate linjer.

Produktion:

Welcome to techcodeview.com 

Eksempel 2: Split vha -en kolon som -en afgrænsning

Kode:

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

Produktion:

Welcome to techcodeview.com 

Metode 3: Opdel strengen med en afgrænser med flere tegn

I denne metode bruges en variabel til at gemme strengdata, og en anden variabel bruges til at gemme afgrænserdata med flere tegn. En matrixvariabel er også erklæret til at gemme den opdelte streng.

Kode:

# 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 

Produktion:

Romy Pushkar Nikhil Rinkle