Techniken zur Zeichenkettenverarbeitung

ShellBeginner
Jetzt üben

Einführung

Beim Schreiben von Skripten müssen Sie häufig Text ändern, der in Variablen gespeichert ist. Vielleicht möchten Sie einen bestimmten Teil eines Dateipfads extrahieren, ein Wort in einer Konfigurationseinstellung ersetzen oder sicherstellen, dass eine Variable auch dann einen gültigen Wert enthält, wenn der Benutzer keinen Wert angegeben hat.

Bash stellt für diese Aufgaben leistungsfähige integrierte Werkzeuge bereit, die als Parameterexpansion bezeichnet werden.

Das ist ein wichtiges Shell-Konzept, weil Sie damit Text umwandeln können, ohne zusätzliche Befehle zu starten. Beim Shell-Scripting sind integrierte Funktionen oft schneller und einfacher, als für jede kleine Änderung externe Dienstprogramme aufzurufen.

In diesem Lab lernen Sie drei wichtige Techniken zur Zeichenkettenverarbeitung kennen:

  1. Slicing: Einen bestimmten Teil einer Zeichenkette extrahieren, zum Beispiel die ersten 5 Zeichen.
  2. Ersetzen: Text innerhalb einer Zeichenkette suchen und ersetzen.
  3. Standardwerte: Automatisch einen Ersatzwert zuweisen, wenn eine Variable fehlt oder leer ist.

Eine Zeichenkettenvariable definieren

Erstellen Sie zunächst eine Variable, die einen langen Dateipfad enthält. Diese Zeichenkette verwenden Sie anschließend, um die Verarbeitungstechniken zu üben.

Die Verarbeitung von Zeichenketten kommt bei der Arbeit mit der Shell überall vor, weil viele Systeminformationen als Text dargestellt werden: Pfade, Benutzernamen, Hostnamen, Konfigurationswerte und Befehlsausgaben. Text direkt in der Shell umzuformen, steigert Ihre Produktivität erheblich.

Erstellen Sie ein neues Skript mit dem Namen string_lab.sh.

Öffnen Sie string_lab.sh und fügen Sie den folgenden Code ein:

nano string_lab.sh
#!/bin/bash

## Define a variable with a file path
FILE_PATH="/usr/local/share/applications/config.xml"

echo "Original Path: $FILE_PATH"

Speichern Sie die Datei (Ctrl+O, Enter) und beenden Sie den Editor (Ctrl+X).

Machen Sie das Skript ausführbar und führen Sie es aus, um die Umgebung vorzubereiten:

chmod +x string_lab.sh
./string_lab.sh

Die Ausgabe sollte den vollständigen Pfad enthalten. Beginnen Sie nun damit, diese Zeichenkette zu bearbeiten.

Eine Teilzeichenkette extrahieren (Slicing)

Manchmal benötigen Sie nur einen bestimmten Teil einer Zeichenkette, zum Beispiel die ersten Zeichen. Dies wird Slicing genannt.

Die Syntax für Slicing lautet: ${Variable:Offset:Length}

  • Offset: Gibt an, an welcher Stelle begonnen wird (0 ist das erste Zeichen).
  • Length: Gibt an, wie viele Zeichen übernommen werden.

Dies geschieht mithilfe der Parameterexpansion. Bash wandelt den Variablenwert intern um, bevor der Befehl ausgeführt wird. Für eine einfache Teilzeichenkettenoperation ist kein zusätzliches Dienstprogramm wie cut erforderlich.

Extrahieren Sie die ersten 5 Zeichen (/usr/) aus unserer Variable FILE_PATH.

Öffnen Sie string_lab.sh:

nano string_lab.sh

Fügen Sie den folgenden Code am Ende der Datei ein:

## Slicing: Start at index 0, take 5 characters
## Syntax: ${Variable : Start : Length}
SLICE=${FILE_PATH:0:5}

echo "First 5 characters: $SLICE"

Speichern Sie die Datei und beenden Sie den Editor. Führen Sie das Skript aus:

./string_lab.sh

Ergebnis:

First 5 characters: /usr/

Bash hat genau 5 Zeichen ab dem Anfang der Zeichenkette extrahiert.

Eine Teilzeichenkette ersetzen

Diese Technik funktioniert wie „Suchen und Ersetzen“ in einem Texteditor.

Die Syntax lautet: ${Variable/Find/Replace}.

Angenommen, Sie möchten den Ordner share in unserem Dateipfad durch bin ersetzen.

Öffnen Sie string_lab.sh:

nano string_lab.sh

Fügen Sie diesen Code ein:

## Replacement: Find 'share', replace with 'bin'
## Syntax: ${Variable / Pattern / Replacement}
NEW_PATH=${FILE_PATH/share/bin}

echo "Modified Path: $NEW_PATH"

Speichern Sie die Datei und beenden Sie den Editor. Führen Sie das Skript aus:

./string_lab.sh

Ergebnis:

Modified Path: /usr/local/bin/applications/config.xml

Die Shell hat das erste Vorkommen von share gefunden und durch bin ersetzt.

Das ist häufig nützlich, wenn Sie Pfade bearbeiten, Dateinamen bereinigen oder schnell Konfigurationsänderungen vornehmen möchten. Da die Verarbeitung direkt in Bash erfolgt, ist sie bei einer kleinen Ersetzung in der Regel ressourcenschonender und leichter lesbar als der Aufruf eines separaten Textverarbeitungsbefehls.

Einen Standardwert bereitstellen

Skripte verwenden häufig Eingaben oder Umgebungsvariablen wie USER oder HOME. Wenn diese Variablen fehlen, kann Ihr Skript abbrechen oder sich unvorhersehbar verhalten.

Sie können einen Standardwert angeben, der verwendet wird, wenn die Variable nicht gesetzt oder leer ist.

Die Syntax lautet: ${Variable:-DefaultValue}.

Öffnen Sie string_lab.sh:

nano string_lab.sh

Fügen Sie diesen Code ein. Beachten Sie, dass USER_NAME in unserem Skript nicht definiert wurde und daher derzeit nicht gesetzt ist.

## Default Value: If USER_NAME is missing, use 'guest'
## Syntax: ${Variable :- Default}
CURRENT_USER=${USER_NAME:-guest}

echo "Current User: $CURRENT_USER"

Speichern Sie die Datei und beenden Sie den Editor. Führen Sie das Skript aus:

./string_lab.sh

Ergebnis:

Current User: guest

Da USER_NAME nicht definiert war, hat Bash die fehlenden Daten behandelt, indem der Ersatzwert guest verwendet wurde. Dadurch kann Ihr Skript problemlos weiterlaufen.

Dieses Muster ist besonders bei der Automatisierung hilfreich, wenn Eingaben aus Umgebungsvariablen oder optionalen Argumenten stammen können. Ein sinnvoller Standardwert macht ein Skript sicherer und vorhersehbarer, wenn Daten fehlen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Zeichenketten mithilfe der Parameterexpansion direkt in Bash verarbeiten:

  1. Slicing (${var:offset:length}): Präzise Teilzeichenketten extrahieren.
  2. Ersetzen (${var/old/new}): Den Inhalt einer Variable ändern.
  3. Standardwerte (${var:-default}): Fehlende Variablen zuverlässig behandeln.

Mit diesen Techniken können Sie robuste Skripte schreiben, die Text effizient verarbeiten, ohne für einfache Aufgaben externe Werkzeuge wie sed oder awk zu benötigen.