Grundlegende String-Operationen

ShellShellBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie grundlegende String-Operationen im Shell-Skripting kennen. String-Operationen sind unerlässlich, um Daten aus Text in verschiedenen Skripting-Aufgaben zu manipulieren und zu extrahieren. Sie werden Konzepte wie die Bestimmung der String-Länge, das Finden von Zeichenpositionen, das Extrahieren von Substrings (Teilstrings) und das Ersetzen von Teilen von Strings untersuchen. Diese Fähigkeiten sind entscheidend für eine effektive Textverarbeitung in Shell-Skripten.

Kurzübersicht

Hier ist eine kurze Übersicht über die String-Operationen, die wir in diesem Lab behandeln werden:

Operation Syntax Beschreibung Beispiel
String-Länge (String Length) ${#string} Berechnet die Anzahl der Zeichen in einem String ${#"hello"} ergibt 5
Zeichenposition finden (Find Character Position) $(expr index "$string" "$char") Findet die Position eines Zeichens in einem String (1-indiziert) $(expr index "abcdef" "c") ergibt 3
Substring extrahieren (Extract Substring) ${string:start:length} Extrahiert einen Teil eines Strings (0-indiziert) ${"hello":1:3} ergibt ell
Erstes Vorkommnis ersetzen (Replace First Occurrence) ${string/pattern/replacement} Ersetzt das erste Vorkommnis eines Musters (Pattern) ${"hello"/l/L} ergibt heLlo
Alle Vorkommnisse ersetzen (Replace All Occurrences) ${string//pattern/replacement} Ersetzt alle Vorkommnisse eines Musters (Pattern) ${"hello"//l/L} ergibt heLLo
Am Anfang ersetzen (Replace at Beginning) ${string/#pattern/replacement} Ersetzt das Muster (Pattern) nur, wenn es am Anfang des Strings steht ${"hello"/#he/HE} ergibt HEllo
Am Ende ersetzen (Replace at End) ${string/%pattern/replacement} Ersetzt das Muster (Pattern) nur, wenn es am Ende des Strings steht ${"hello"/%lo/LO} ergibt helLO
Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 96% ist. Es hat eine positive Bewertungsrate von 100% von den Lernenden erhalten.

Erstellen einer Skriptdatei

Beginnen wir mit dem Erstellen einer Skriptdatei, in der wir unsere String-Operationen schreiben werden.

  1. Öffnen Sie Ihr Terminal in der WebIDE. Das Terminal ist der Ort, an dem Sie Befehle eingeben, um mit dem Linux-System zu interagieren.

  2. Navigieren Sie zum Projektverzeichnis:

    cd ~/project

    Dieser Befehl ändert Ihr aktuelles Verzeichnis in ~/project. Das Symbol ~ repräsentiert Ihr Home-Verzeichnis, also ist ~/project ein Ordner namens "project" in Ihrem Home-Verzeichnis.

  3. Erstellen Sie eine neue Datei namens string_operations.sh:

    touch string_operations.sh

    Der Befehl touch erstellt eine neue, leere Datei. Wenn die Datei bereits existiert, aktualisiert er den Zeitstempel der Datei.

  4. Öffnen Sie die Datei im WebIDE-Editor. Sie können dies tun, indem Sie auf den Dateinamen im Datei-Explorer auf der linken Seite Ihrer WebIDE klicken.

  5. Fügen Sie die folgende Shebang-Zeile am Anfang der Datei hinzu, um den Interpreter anzugeben:

    #!/bin/bash

    Diese Zeile, genannt "Shebang", weist das System an, die Bash-Shell zu verwenden, um dieses Skript zu interpretieren. Sie ist immer die erste Zeile eines Shell-Skripts.

String-Länge (String Length)

Lernen wir nun, wie man die Länge eines Strings bestimmt.

  1. Fügen Sie den folgenden Code zu Ihrer Datei string_operations.sh hinzu:

    echo "Schritt 2: String-Länge"
    
    STRING="Hello, World!"
    LENGTH=${#STRING}
    
    echo "Der String ist: $STRING"
    echo "Seine Länge ist: $LENGTH"

    Lassen Sie uns dies Schritt für Schritt aufschlüsseln:

    • Zuerst fügen wir einen Echo-Befehl hinzu, um eine Überschrift für diesen Abschnitt anzuzeigen.

      echo "Schritt 2: String-Länge"
    • Als Nächstes definieren wir eine Variable namens STRING und weisen ihr den Wert "Hello, World!" zu.

      STRING="Hello, World!"

      In Bash müssen wir keine speziellen Schlüsselwörter verwenden, um Variablen zu definieren. Wir schreiben einfach den Variablennamen, gefolgt vom Gleichheitszeichen, gefolgt vom Wert.

    • Dann berechnen wir die Länge des Strings mit der Syntax ${#variable} und speichern sie in einer Variablen namens LENGTH.

      LENGTH=${#STRING}

      ${#variable} ist eine spezielle Shell-Parameter-Expansion (Shell Parameter Expansion), die die Anzahl der Zeichen in dem in der Variablen gespeicherten String zurückgibt.

    • Schließlich zeigen wir sowohl den Original-String als auch seine Länge an.

      echo "Der String ist: $STRING"
      echo "Seine Länge ist: $LENGTH"

      Das Symbol $ vor einem Variablennamen weist Bash an, ihn durch den Wert der Variablen zu ersetzen.

  2. Speichern Sie die Datei. In den meisten Editoren können Sie dies tun, indem Sie Strg+S (oder Cmd+S auf dem Mac) drücken.

  3. Machen Sie das Skript ausführbar:

    chmod +x string_operations.sh

    Dieser Befehl ändert die Berechtigungen der Datei, um sie ausführbar zu machen:

    • chmod steht für "change mode" (Modus ändern)
    • +x bedeutet "execute permission hinzufügen" (Ausführungsberechtigung hinzufügen)
    • Ohne diesen Schritt wüsste das System nicht, dass diese Datei als Programm behandelt werden soll.
  4. Führen Sie das Skript aus:

    ./string_operations.sh

    Das Präfix ./ weist die Shell an, das Skript im aktuellen Verzeichnis zu suchen. Ohne dieses Präfix würde die Shell nur in Verzeichnissen suchen, die in Ihrer PATH-Umgebungsvariable aufgeführt sind.

Sie sollten eine ähnliche Ausgabe sehen wie:

Schritt 2: String-Länge
Der String ist: Hello, World!
Seine Länge ist: 13

Wenn Sie diese Ausgabe nicht sehen, überprüfen Sie noch einmal, ob Sie die Datei gespeichert und ausführbar gemacht haben.

Finden der Zeichenposition (Finding Character Position)

Als Nächstes lernen wir, wie man die Position eines Zeichens in einem String findet.

  1. Fügen Sie den folgenden Code zu Ihrer Datei string_operations.sh hinzu:

    echo -e "\nSchritt 3: Finden der Zeichenposition"
    
    STRING="abcdefghijklmnopqrstuvwxyz"
    CHAR="j"
    
    POSITION=$(expr index "$STRING" "$CHAR")
    
    echo "Der String ist: $STRING"
    echo "Wir suchen nach dem Zeichen: $CHAR"
    echo "Es befindet sich an Position: $POSITION"

    Lassen Sie uns diesen Code im Detail untersuchen:

    • Wir beginnen mit einem Echo-Befehl, der die Option -e und eine \n Escape-Sequenz enthält.

      echo -e "\nSchritt 3: Finden der Zeichenposition"
      • Die Option -e aktiviert die Interpretation von Escape-Sequenzen.
      • Die \n Escape-Sequenz fügt vor dem Text eine neue Zeile hinzu und schafft so eine visuelle Trennung vom vorherigen Abschnitt.
    • Als Nächstes definieren wir zwei Variablen:

      STRING="abcdefghijklmnopqrstuvwxyz"
      CHAR="j"
      • STRING enthält das gesamte Kleinbuchstabenalphabet.
      • CHAR enthält das Zeichen "j", nach dem wir suchen werden.
    • Wir verwenden den Befehl expr index, um die Position des Zeichens zu finden:

      POSITION=$(expr index "$STRING" "$CHAR")
      • expr ist ein Hilfsprogramm zum Auswerten von Ausdrücken (expressions).
      • Die Operation index sucht nach Zeichen in einem String.
      • Die $() Syntax erfasst die Ausgabe des Befehls und weist sie der Variablen POSITION zu.
      • Wir schließen die Variablen in doppelte Anführungszeichen ("$STRING") ein, um Probleme mit Sonderzeichen zu vermeiden.
      • Wichtig: Dieser Befehl gibt Positionen zurück, die bei 1 beginnen (nicht bei 0).
    • Schließlich geben wir die Ergebnisse aus:

      echo "Der String ist: $STRING"
      echo "Wir suchen nach dem Zeichen: $CHAR"
      echo "Es befindet sich an Position: $POSITION"
  2. Speichern Sie die Datei und führen Sie das Skript erneut aus:

    ./string_operations.sh

Sie sollten eine zusätzliche Ausgabe sehen, die der folgenden ähnelt:

Schritt 3: Finden der Zeichenposition
Der String ist: abcdefghijklmnopqrstuvwxyz
Wir suchen nach dem Zeichen: j
Es befindet sich an Position: 10

Beachten Sie, dass die Position 1-indiziert ist, was bedeutet, dass sich das erste Zeichen an Position 1 befindet, nicht an 0. Dies unterscheidet sich von vielen Programmiersprachen, in denen die Indizierung typischerweise bei 0 beginnt.

Substring-Extraktion (Substring Extraction)

Lernen wir nun, wie man einen Teil eines Strings extrahiert.

  1. Fügen Sie den folgenden Code zu Ihrer Datei string_operations.sh hinzu:

    echo -e "\nSchritt 4: Substring-Extraktion"
    
    STRING="The quick brown fox jumps over the lazy dog"
    START=10
    LENGTH=5
    
    SUBSTRING=${STRING:$START:$LENGTH}
    
    echo "Der Original-String ist: $STRING"
    echo "Extrahieren von 5 Zeichen ab Position 10:"
    echo "Der Substring ist: $SUBSTRING"

    Analysieren wir diesen Code Stück für Stück:

    • Zuerst fügen wir eine Überschrift mit einer neuen Zeile zur visuellen Trennung hinzu:

      echo -e "\nSchritt 4: Substring-Extraktion"
    • Als Nächstes definieren wir unsere Variablen:

      STRING="The quick brown fox jumps over the lazy dog"
      START=10
      LENGTH=5
      • STRING enthält einen Beispielsatz.
      • START ist die Position, an der wir mit der Extraktion beginnen möchten (Position 10).
      • LENGTH ist, wie viele Zeichen wir extrahieren möchten (5 Zeichen).
    • Wir verwenden die Substring-Extraktionssyntax von Bash, um einen Teil des Strings zu erhalten:

      SUBSTRING=${STRING:$START:$LENGTH}
      • Die Syntax lautet ${variable:start_position:length}
      • $START und $LENGTH sind Variablen, die die Werte 10 und 5 enthalten.
      • Wichtig: Im Gegensatz zum Befehl expr index sind die Positionen hier 0-indiziert, was bedeutet, dass sich das erste Zeichen an Position 0 befindet.
    • Schließlich zeigen wir die Ergebnisse an:

      echo "Der Original-String ist: $STRING"
      echo "Extrahieren von 5 Zeichen ab Position 10:"
      echo "Der Substring ist: $SUBSTRING"
  2. Speichern Sie die Datei und führen Sie das Skript erneut aus:

    ./string_operations.sh

Sie sollten eine zusätzliche Ausgabe sehen, die der folgenden ähnelt:

Schritt 4: Substring-Extraktion
Der Original-String ist: The quick brown fox jumps over the lazy dog
Extrahieren von 5 Zeichen ab Position 10:
Der Substring ist: brown

Im String "The quick brown fox..." ist Position 10 (wenn man von 0 zählt) das 'b' in "brown", und die nächsten 5 Zeichen sind "brown". Aus diesem Grund ist unser extrahierter Substring "brown".

Beachten Sie, dass die Indizierung anders ist als im vorherigen Schritt:

  • In expr index (Schritt 3) beginnen die Positionen bei 1 (das erste Zeichen befindet sich an Position 1).
  • Bei der Substring-Extraktion ${STRING:position:length} (Schritt 4) beginnen die Positionen bei 0 (das erste Zeichen befindet sich an Position 0).

Dies ist eine häufige Ursache für Verwirrung beim Shell-Scripting (Shell Scripting), daher ist es wichtig, sich zu merken, welche Operationen welches Indizierungssystem verwenden.

String-Ersetzung (String Replacement)

Lernen wir abschließend, wie man Teile eines Strings ersetzt.

  1. Fügen Sie den folgenden Code zu Ihrer Datei string_operations.sh hinzu:

    echo -e "\nSchritt 5: String-Ersetzung"
    
    STRING="The quick brown fox jumps over the lazy dog"
    echo "Original string: $STRING"
    
    ## Ersetze das erste Vorkommnis von 'o' durch 'O'
    NEW_STRING=${STRING/o/O}
    echo "Ersetze das erste 'o' durch 'O': $NEW_STRING"
    
    ## Ersetze alle Vorkommnisse von 'o' durch 'O'
    NEW_STRING=${STRING//o/O}
    echo "Ersetze alle 'o' durch 'O': $NEW_STRING"
    
    ## Ersetze 'The quick' durch 'The slow', wenn es am Anfang des Strings steht
    NEW_STRING=${STRING/#The quick/The slow}
    echo "Ersetze 'The quick' durch 'The slow' am Anfang: $NEW_STRING"
    
    ## Ersetze 'dog' durch 'cat', wenn es am Ende des Strings steht
    NEW_STRING=${STRING/%dog/cat}
    echo "Ersetze 'dog' durch 'cat' am Ende: $NEW_STRING"

    Gehen wir jede String-Ersetzungsoperation durch:

    • Zuerst geben wir eine Überschrift aus und zeigen den Original-String:

      echo -e "\nSchritt 5: String-Ersetzung"
      STRING="The quick brown fox jumps over the lazy dog"
      echo "Original string: $STRING"
    • Ersetze das erste Vorkommnis eines Zeichens:

      ## Ersetze das erste Vorkommnis von 'o' durch 'O'
      NEW_STRING=${STRING/o/O}
      echo "Ersetze das erste 'o' durch 'O': $NEW_STRING"
      • Die Syntax lautet ${variable/pattern/replacement}
      • Dies findet das erste Vorkommnis von 'o' und ersetzt es durch 'O'.
      • Nur das erste 'o' in "brown" wird ersetzt, die anderen bleiben unverändert.
    • Ersetze alle Vorkommnisse eines Zeichens:

      ## Ersetze alle Vorkommnisse von 'o' durch 'O'
      NEW_STRING=${STRING//o/O}
      echo "Ersetze alle 'o' durch 'O': $NEW_STRING"
      • Die Syntax lautet ${variable//pattern/replacement} (beachten Sie den doppelten Schrägstrich)
      • Der doppelte Schrägstrich weist Bash an, ALLE Vorkommnisse des Musters zu ersetzen.
      • Alle 'o's im gesamten String werden durch 'O's ersetzt.
    • Ersetze ein Muster am Anfang eines Strings:

      ## Ersetze 'The quick' durch 'The slow', wenn es am Anfang des Strings steht
      NEW_STRING=${STRING/#The quick/The slow}
      echo "Ersetze 'The quick' durch 'The slow' am Anfang: $NEW_STRING"
      • Die Syntax lautet ${variable/#pattern/replacement}
      • Das # Symbol gibt an, dass sich das Muster am Anfang des Strings befinden muss.
      • Dies ersetzt 'The quick' nur, wenn es am Anfang des Strings steht.
    • Ersetze ein Muster am Ende eines Strings:

      ## Ersetze 'dog' durch 'cat', wenn es am Ende des Strings steht
      NEW_STRING=${STRING/%dog/cat}
      echo "Ersetze 'dog' durch 'cat' am Ende: $NEW_STRING"
      • Die Syntax lautet ${variable/%pattern/replacement}
      • Das % Symbol gibt an, dass sich das Muster am Ende des Strings befinden muss.
      • Dies ersetzt 'dog' nur, wenn es am Ende des Strings steht.
  2. Speichern Sie die Datei und führen Sie das Skript erneut aus:

    ./string_operations.sh

Sie sollten eine zusätzliche Ausgabe sehen, die der folgenden ähnelt:

Schritt 5: String-Ersetzung
Original string: The quick brown fox jumps over the lazy dog
Ersetze das erste 'o' durch 'O': The quick brOwn fox jumps over the lazy dog
Ersetze alle 'o' durch 'O': The quick brOwn fOx jumps Over the lazy dOg
Ersetze 'The quick' durch 'The slow' am Anfang: The slow brown fox jumps over the lazy dog
Ersetze 'dog' durch 'cat' am Ende: The quick brown fox jumps over the lazy cat

Diese String-Ersetzungsoperationen sind leistungsstarke Werkzeuge zur Bearbeitung von Text in Shell-Skripten (Shell Scripts). Sie ermöglichen es Ihnen, gezielte Ersetzungen basierend auf Mustern und Positionen durchzuführen, was besonders nützlich für Aufgaben wie Datenverarbeitung (Data Processing), Textformatierung oder Dateiinhaltsmanipulation ist.

Zusammenfassung

In diesem Lab haben Sie verschiedene grundlegende String-Operationen (String Operations) im Shell-Scripting (Shell Scripting) gelernt und geübt:

  1. Erstellen und Ausführen eines Shell-Skripts.
  2. Berechnen der Länge eines Strings mit ${#string}.
  3. Finden der Position eines Zeichens in einem String mit $(expr index "$string" "$char").
  4. Extrahieren eines Substrings aus einem größeren String mit ${string:start:length}.
  5. Durchführen verschiedener String-Ersetzungsoperationen mit:
    • ${string/pattern/replacement} - Ersetze das erste Vorkommnis
    • ${string//pattern/replacement} - Ersetze alle Vorkommnisse
    • ${string/#pattern/replacement} - Ersetze am Anfang des Strings
    • ${string/%pattern/replacement} - Ersetze am Ende des Strings

Diese Fähigkeiten bilden die Grundlage für komplexere Textverarbeitungsaufgaben (Text Processing Tasks) im Shell-Scripting. Wenn Sie weiterhin mit Shell-Skripten arbeiten, werden Sie feststellen, dass diese String-Operationen von unschätzbarem Wert für die Bearbeitung und Analyse von Textdaten in Ihren Projekten sind. Denken Sie daran, dass Übung der Schlüssel zur Beherrschung dieser Konzepte ist. Zögern Sie also nicht, mit verschiedenen Strings und Operationen zu experimentieren!