GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So teilen Sie eine Zeichenfolge in Bash-Skript auf

Angenommen, Sie haben eine lange Zeichenfolge mit mehreren Wörtern, die durch ein Komma oder einen Unterstrich getrennt sind. Sie möchten diesen String aufteilen und die einzelnen Wörter extrahieren.

Sie können Zeichenfolgen in Bash mit dem Internal Field Separator (IFS) und dem Befehl read aufteilen oder den Befehl tr verwenden. Lassen Sie mich Ihnen anhand von Beispielen zeigen, wie das geht.

Methode 1:String mit Lesebefehl in Bash teilen

Hier ist mein Beispielskript zum Teilen der Zeichenfolge mit dem Lesebefehl:

#!/bin/bash
#
# Script to split a string based on the delimiter

my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"
IFS=';' read -ra my_array <<< "$my_string"

#Print the split string
for i in "${my_array[@]}"
do
    echo $i
done

Der Teil, der die Zeichenfolge geteilt hat, ist hier:

IFS=';' read -ra my_array <<< "$my_string"

Lass es mich dir erklären. IFS bestimmt das Trennzeichen, an dem Sie die Zeichenfolge teilen möchten. In meinem Fall ist es ein Semikolon. Es kann alles sein, was Sie wollen, wie Leerzeichen, Tabulator, Komma oder sogar ein Buchstabe.

Das IFS im Lesebefehl teilt die Eingabe am Trennzeichen. Der read-Befehl liest die Roheingabe (Option -r) und interpretiert die Backslashes daher wörtlich, anstatt sie als Escape-Zeichen zu behandeln. Die Option -a mit Lesebefehl speichert das gelesene Wort in einem Array in der Bash.

In einfacheren Worten wird die lange Zeichenfolge in mehrere Wörter aufgeteilt, die durch das Trennzeichen getrennt sind, und diese Wörter werden in einem Array gespeichert.

Jetzt können Sie auf das Array zugreifen, um jedes gewünschte Wort zu erhalten, oder die for-Schleife in der Bash verwenden, um alle Wörter einzeln auszugeben, wie ich es im obigen Skript getan habe.

Hier ist die Ausgabe des obigen Skripts:

Ubuntu
Linux Mint
Debian
Arch
Fedora

Methode 2:String mit tr-Befehl in Bash teilen

Dies ist das Bash-Split-String-Beispiel mit dem Befehl tr (translate):

#!/bin/bash
#
# Script to split a string based on the delimiter

my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"  
my_array=($(echo $my_string | tr ";" "\n"))

#Print the split string
for i in "${my_array[@]}"
do
    echo $i
done

Dieses Beispiel ist so ziemlich das gleiche wie das vorherige. Anstelle des read-Befehls wird der tr-Befehl verwendet, um den String am Trennzeichen aufzuteilen.

Das Problem bei diesem Ansatz ist, dass die Array-Elemente auf „Leerzeichen“ aufgeteilt werden. Aus diesem Grund werden Elemente wie „Linux Mint“ als zwei Wörter behandelt.

Hier ist die Ausgabe des obigen Skripts:

Ubuntu
Linux
Mint
Debian
Arch
Fedora

Das ist der Grund, warum ich die erste Methode zum Teilen von Strings in Bash bevorzuge.

Ich hoffe, dieses schnelle Bash-Tutorial hat Ihnen beim Aufteilen der Zeichenfolge geholfen. In einem verwandten Beitrag möchten Sie vielleicht auch etwas über String-Vergleiche in Bash lesen.

Und wenn Bash absolut neu für Sie ist, lesen Sie unsere Bash-Tutorial-Reihe für Anfänger.


Linux
  1. Wie funktioniert cat << EOF in Bash?

  2. Wie kann man Bash-Skripte in Vim hervorheben?

  3. Wie übergebe ich Parameter an ein Bash-Skript?

  4. URL, die eine Zeichenfolge in Bash-Skript codiert

  5. Wie kann man das Bash-Skript alle N Sekunden wiederholt ausführen?

So führen Sie ein Bash-Skript aus {7 Methoden}

So schreiben Sie ein Bash-Skript mit Beispielen

So prüfen Sie, ob eine Zeichenfolge in Bash eine Teilzeichenfolge enthält

So führen Sie ein Bash-Skript aus

Wie liest man eine Zeichenfolge als Hex-Zahl in Bash?

Wie überprüfe ich die Syntax eines Bash-Skripts, ohne es auszuführen?