Bash-Skripting – Geteilter String

In diesem Artikel besprechen wir, wie man Strings in einem Bash-Skript teilt.

Das Aufteilen einer einzelnen Zeichenfolge in mehrere Zeichenfolgen wird als Zeichenfolgenaufteilung bezeichnet. Viele Programmiersprachen verfügen über eine integrierte Funktion zum Aufteilen von Zeichenfolgen, in Bash gibt es jedoch keine integrierte Funktion dafür. Es gibt verschiedene Methoden, um eine Zeichenfolge in Bash aufzuteilen. Sehen wir uns alle Methoden einzeln mit Beispielen an.

Methode 1: Verwendung der IFS-Variable

$IFS(Internal Field Separator) ist eine spezielle Shell-Variable. Es wird verwendet, um das Trennzeichen zuzuweisen (eine Folge von einem oder mehreren Zeichen, anhand derer wir die Zeichenfolge aufteilen möchten). Jeder Wert oder jedes Zeichen wie „ “, „ “, „-“ usw. kann als Trennzeichen dienen. Nachdem der Wert der Variablen $IFS zugewiesen wurde, muss der Stringwert gelesen werden. Wir können Zeichenfolgen mit den Optionen „-r“ und „-a“ lesen.

  • „-r“: Der Backslash () wird als Zeichen anstelle eines Escape-Zeichens gelesen
  • „-a“: Wird verwendet, um die aufgeteilten Wörter in einer Array-Variablen zu speichern, die nach der Option -a deklariert wird.

Beispiel 1: Teilen Sie die Zeichenfolge durch Leerzeichen

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 

Ausgabe:

Welcome to techcodeview.com 

Beispiel 2: Zeichenfolge durch ein Symbol teilen

String-Aufteilung mit @-Symbol.

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 

Ausgabe:

Welcome to techcodeview.com !! 

Methode 2: Ohne Verwendung der IFS-Variablen

Bei dieser Methode wird der Befehl readarray mit der Option -d verwendet, um die Zeichenfolgendaten aufzuteilen. „-d“: Diese Option fungiert als IFS-Variable zum Definieren des Trennzeichens.

Beispiel 1: Zeichenfolge durch Leerzeichen aufteilen

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 

Sehen wir uns nun an, wie sich das Skript verhält:

  • Das Skript legt den Wert von fest text> Willkommen bei techcodeview.com.
  • Der readarray> Der Befehl teilt die Zeichenfolge in ein Array auf, wobei Leerzeichen als Trennzeichen verwendet werden, wodurch das Array entsteht strarr> Enthält die folgenden Elemente: Willkommen bei techcodeview.com.
  • Die for-Schleife durchläuft jedes Element von strarr> Array.
  • Es druckt jedes Element einzeln in separaten Zeilen.

Ausgabe:

Welcome to techcodeview.com 

Beispiel 2: Teilen mit A Doppelpunkt als A Trennzeichen

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 

Ausgabe:

Welcome to techcodeview.com 

Methode 3: Teilen Sie die Zeichenfolge mit einem Trennzeichen aus mehreren Zeichen

Bei dieser Methode wird eine Variable zum Speichern von Zeichenfolgendaten und eine andere Variable zum Speichern von Trennzeichendaten mit mehreren Zeichen verwendet. Außerdem wird eine Array-Variable zum Speichern der geteilten Zeichenfolge deklariert.

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 

Ausgabe:

Romy Pushkar Nikhil Rinkle