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 entstehtstrarr>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