Bash-scripting - String splitsen

In dit artikel bespreken we hoe je strings kunt splitsen in een bash-script.

Het verdelen van een enkele string in meerdere strings wordt stringsplitsing genoemd. Veel programmeertalen hebben een ingebouwde functie om string-splitsing uit te voeren, maar er is geen ingebouwde functie in bash om dit te doen. Er zijn verschillende methoden om een ​​gesplitste string in bash uit te voeren. Laten we alle methoden één voor één bekijken met voorbeelden.

Methode 1: IFS-variabele gebruiken

$IFS(Internal Field Separator) is een speciale shellvariabele. Het wordt gebruikt om het scheidingsteken toe te wijzen (een reeks van een of meer tekens op basis waarvan we de tekenreeks willen splitsen). Elke waarde of teken zoals ‘ ’, ‘ ’, ‘-‘ enz. kan het scheidingsteken zijn. Nadat de waarde aan de $IFS-variabele is toegewezen, moet de tekenreekswaarde worden gelezen. We kunnen string lezen met de opties ‘-r’ en ‘-a’.

  • ‘-r’: Er wordt een backslash () gelezen als een teken in plaats van een escape-teken
  • ‘-a’: Het wordt gebruikt om de gesplitste woorden op te slaan in een arrayvariabele die wordt gedeclareerd na de optie -a.

Voorbeeld 1: Splits de tekenreeks op spatie

Code:

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

Uitgang:

Welcome to techcodeview.com 

Voorbeeld 2: String splitsen door een symbool

Tekenreeks gesplitst met @-symbool.

Code:

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

Uitgang:

Welcome to techcodeview.com !! 

Methode 2: Zonder gebruik van de IFS-variabele

Bij deze methode wordt de opdracht readarray met de optie -d gebruikt om de stringgegevens te splitsen. ‘-d’: deze optie fungeert als een IFS-variabele om het scheidingsteken te definiëren.

Voorbeeld 1: Tekenreeks splitsen op spatie

Code:

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

Laten we nu eens kijken hoe het script zich gedraagt:

  • Het script stelt de waarde in van text> Welkom bij techcodeview.com.
  • De readarray> commando splitst de string in een array met spatie als scheidingsteken, wat resulteert in de array strarr> met de volgende elementen: Welkom bij techcodeview.com.
  • De for-lus herhaalt zich over elk element van de strarr> reeks.
  • Het drukt elk element één voor één af op afzonderlijke regels.

Uitgang:

Welcome to techcodeview.com 

Voorbeeld 2: Splitsen met A dikke darm als A scheidingsteken

Code:

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

Uitgang:

Welcome to techcodeview.com 

Methode 3: Splits de tekenreeks met een scheidingsteken dat uit meerdere tekens bestaat

Bij deze methode wordt een variabele gebruikt om tekenreeksgegevens op te slaan en een andere variabele om scheidingsgegevens met meerdere tekens op te slaan. Er wordt ook een arrayvariabele gedeclareerd om de gesplitste string op te slaan.

Code:

# 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 

Uitgang:

Romy Pushkar Nikhil Rinkle