String teilen in Bash

Fumbani Banda 19 Januar 2022
  1. Verwenden des Befehls tr zum Aufteilen einer Zeichenkette in Bash
  2. Verwenden von IFS zum Aufteilen einer Zeichenkette in Bash
  3. Verwenden des Befehls read zum Teilen einer Zeichenkette in Bash
  4. Verwenden der Parametererweiterung zum Teilen eines Strings in Bash
  5. Verwenden des Befehls cut zum Teilen einer Zeichenkette in Bash
String teilen in Bash

Dieses Tutorial demonstriert das Aufteilen eines Strings an einem Trennzeichen in der Bash mit den Befehlen tr, IFS, read, Parameterexpansion und cut.

Verwenden des Befehls tr zum Aufteilen einer Zeichenkette in Bash

Der Befehl tr ist eine Kurzform für translate. Es übersetzt, löscht und quetscht Zeichen aus der Standardeingabe und schreibt die Ergebnisse in die Standardausgabe.

Es ist ein nützlicher Befehl zum Bearbeiten von Text in der Befehlszeile oder in einem Bash-Skript. Es kann wiederholte Zeichen entfernen, Kleinbuchstaben in Großbuchstaben umwandeln und Zeichen ersetzen.

Im Bash-Skript unten leitet der Befehl echo die String-Variable $addrs an den Befehl tr weiter, der die String-Variable auf ein Trennzeichen - aufteilt. Nach dem Splitten des Strings werden die Werte der Variablen IP zugewiesen.

Dann durchläuft die for-Schleife die Variable $IP und gibt alle Werte mit dem echo-Befehl aus.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"

IP=$(echo $addrs | tr "-" "\n")

for ip in $IP
do
    echo "$ip"
done

Die folgende Ausgabe zeigt, dass die String-Variable $addr am Trennzeichen - in 4 separate Strings aufgeteilt wurde.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Verwenden von IFS zum Aufteilen einer Zeichenkette in Bash

IFS steht für Internal Field Separator.

Das IFS wird zum Aufteilen von Wörtern nach der Erweiterung und zum Aufteilen von Zeilen in Wörter mit dem eingebauten read-Befehl verwendet. Der Wert von IFS sagt der Shell, wie sie Wortgrenzen erkennt.

Der Standardwert des IFS ist ein Leerzeichen, ein Tabulator und eine neue Zeile. Im folgenden Skript wurde der ursprüngliche Wert des IFS in der Variablen OIFS gespeichert und der neue Wert IFS auf - gesetzt.

Das bedeutet, dass die Shell - als neue Wortgrenze behandeln sollte. Die Shell teilt die String-Variable addrs auf - und weist die neuen Werte der Variablen ips zu.

Dann durchläuft die for-Schleife die Variable $ips und gibt alle Werte mit dem echo-Befehl aus.

IFS=$OIFS wird verwendet, um den ursprünglichen Wert der IFS-Variable wiederherzustellen, und unset OIFS weist die Shell an, die Variable OIFS aus der Liste der Variablen zu entfernen, die sie verfolgt.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"

OIFS=$IFS
IFS='-'

ips=$addrs
for ip in $ips
do
    echo "$ip"
done
IFS=$OIFS
unset OIFS

Die folgende Ausgabe zeigt, dass die String-Variable $addr am Trennzeichen - in 4 separate Strings aufgeteilt wurde.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Verwenden des Befehls read zum Teilen einer Zeichenkette in Bash

Der Befehl read ist ein eingebauter Befehl auf Linux-Systemen.

Es wird verwendet, um den Inhalt einer Zeile in eine Variable einzulesen. Es teilt auch Wörter einer Zeichenkette, die einer Shell-Variablen zugewiesen ist.

Die Variable $addrs wird an den read-Befehl im unten stehenden Skript übergeben. Das IFS setzt das Trennzeichen, das als Wortgrenze für die String-Variable dient.

Das bedeutet, dass das - in unserem Fall die Wortgrenze ist. Die Option -a weist den Befehl read an, die Wörter, die in ein Array aufgeteilt wurden, zu speichern, während die Option -r den Befehl read anweist, alle Escape-Zeichen so zu behandeln, wie sie sind, und sie nicht zu interpretieren.

Die aufgespaltenen Wörter werden im Array IP gespeichert. Die for-Schleife durchläuft das Array $IP und gibt alle Werte mit dem echo-Befehl aus.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


IFS='-' read -ra  IP <<< "$addrs"
for ip in "${IP[@]}";
do
    echo "$ip"
done

An der Ausgabe unten können wir erkennen, dass die String-Variable $addr am Trennzeichen - in 4 separate Strings aufgeteilt wurde.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Verwenden der Parametererweiterung zum Teilen eines Strings in Bash

Das folgende Skript verwendet die Parametererweiterung, um Zeichen zu suchen und zu ersetzen. Die Syntax für die Parametererweiterung ist ${variable//search/replace}. Dieser sucht nach einem Muster, das mit search in der Variablen übereinstimmt und ersetzt es durch replace.

In unserem Fall sucht das Skript nach dem Muster - und ersetzt es durch Leerzeichen. Die Klammern um ${addrs//-/ } werden verwendet, um ein Array des neuen Strings namens ip_array zu definieren.

Mit der for-Schleife iterieren wir über alle Elemente der ip_array-Variablen und zeigen sie mit dem echo-Befehl an.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_array=(${addrs//-/ })
for ip in "${ip_array[@]}"
do
    echo "$ip"
done

Die folgende Ausgabe zeigt alle Elemente im ip_array.

192.168.8.1
192.168.8.2
192.168.8.3
192.168.8.4

Auf einzelne Elemente der Variable ip_array können wir durch Übergabe des Index zugreifen. Im folgenden Skript haben wir den Index 0 übergeben, um auf das erste Element im Array zu verweisen.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_array=(${addrs//-/ })
printf "${ip_array[0]}\n"

Die Ausgabe zeigt das erste Element des ip_array.

192.168.8.1

Verwenden des Befehls cut zum Teilen einer Zeichenkette in Bash

Das folgende Skript verwendet den Befehl cut, um einen Teilstring zu extrahieren. Die Option -d gibt das Trennzeichen an, mit dem die Zeichenkette in Felder unterteilt wird, und die Option -f legt die Nummer des zu extrahierenden Felds fest.

Aber die Zeichenkette wird in unserem Fall mit - als Trennzeichen geteilt, und um auf das erste Feld zuzugreifen, übergeben wir das Argument 1 an die Option -f, und wir machen dasselbe, um auf das zweite Feld zuzugreifen, indem wir Übergabe von 2 an die Option -f.

Die Werte werden den Variablen ip_one bzw. ip_two zugewiesen. Mit dem Befehl printf werden die Werte der Variablen angezeigt.

#!/usr/bin/env bash

addrs="192.168.8.1-192.168.8.2-192.168.8.3-192.168.8.4"


ip_one=$(echo $addrs | cut -d '-' -f 1)
ip_two=$(echo $addrs | cut -d '-' -f 2)

printf "$ip_one\n$ip_two\n"

Die folgende Ausgabe zeigt den ersten und zweiten String, die von der String-Variablen $addrs getrennt wurden.

192.168.8.1
192.168.8.2
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Verwandter Artikel - Bash String