HOWTO · Bash
Entfernen Sie das erste Zeichen aus der Zeichenfolge in Bash
Dieser Artikel zeigt den Lesern, wie sie die Programmiersprache Bash verwenden, um das erste Zeichen einer Zeichenfolge zu entfernen.
Auf dieser Seite
Mit der Bash-Parametererweiterung lässt sich das erste Zeichen einer Variablen entfernen: ${my_string:1} nimmt den Teilstring ab Offset 1. Auf Hello angewendet ergibt das beispielsweise ello. Bash hat keine eigene Funktion zum Entfernen von Zeichen aus Zeichenfolgen, aber dieser native Ausdruck erledigt die Aufgabe ohne externen Befehl. Für zeilenweise verarbeiteten Text können Sie auch sed oder cut verwenden.
Das erste Zeichen mit dem Befehl sed entfernen
Die sed-Ersetzung s/^.// entfernt das erste Zeichen jeder Eingabezeile. Im Muster kennzeichnet ^ den Zeilenanfang und . steht für ein beliebiges einzelnes Zeichen. Das ist nützlich, wenn Sie Eingaben zeilenweise verarbeiten; ein mehrzeiliger Wert wird damit nicht als eine einzige Zeichenfolge behandelt.
Führen Sie dieses Beispiel aus. Die Ausgabe enthält unverändert die englische Beschriftung „The modified string is:“:
my_string="Welcome"
new_string=$(printf '%s\n' "$my_string" | sed 's/^.//')
printf 'The modified string is: %s\n' "$new_string"
The modified string is: elcome
Die Befehlsersetzung entfernt abschließende Zeilenumbruchzeichen aus der Befehlsausgabe. Wenn Zeilengrenzen oder abschließende Zeilenumbrüche erhalten bleiben müssen, berücksichtigen Sie dieses Verhalten beim Übernehmen des Ergebnisses.
Das erste Zeichen mit dem Befehl cut entfernen
Die Option cut -c 2- wählt die Zeichenpositionen ab Position 2 bis zum Ende jeder Zeile aus. Damit wird also das erste Zeichen jeder Zeile entfernt, statt einen mehrzeiligen Wert als einzelne Zeichenfolge zu zerlegen. Verwenden Sie den Befehl für zeilenweisen Text, wenn dieses Verhalten zu Ihrer Eingabe passt. Die Zeichenpositionen sind hier keine Byte-Offsets; der Befehl eignet sich daher für gewöhnlichen Text und nicht für beliebige Binärdaten. Da cut von der Standardeingabe liest, passt es außerdem zu Pipelines, in denen Text bereits zeilenweise ankommt.
Bei einer einzelnen Zeile können Sie das Ergebnis einer Variablen zuweisen und ausgeben. In diesem Beispiel verarbeitet cut den Wert und übernimmt das Ergebnis. Die Ausgabe enthält unverändert die englische Beschriftung „The modified string is:“:
my_string="Hello"
new_string=$(printf '%s\n' "$my_string" | cut -c 2-)
printf 'The modified string is: %s\n' "$new_string"
The modified string is: ello
Wie im sed-Beispiel entfernt die Befehlsersetzung abschließende Zeilenumbrüche aus der übernommenen Ausgabe. Das Dienstprogramm cut ist ein externer Befehl und eignet sich daher besonders, wenn Sie ohnehin Zeichen aus Eingabezeilen auswählen müssen.
Das erste Zeichen mit der Bash-Parametererweiterung entfernen
Die Bash-Parametererweiterung ist die knappe Wahl, wenn der Wert bereits in einer Bash-Variablen gespeichert ist. Der Ausdruck ${my_string:1} nimmt den Teilstring ab dem bei null beginnenden Offset 1 bis zum Ende; das erste Zeichen liegt bei Offset 0. Dabei werden weder sed noch cut gestartet.
Führen Sie dieses Beispiel mit einer Bash-Variablen aus. Die Ausgabe enthält unverändert die englische Beschriftung „The modified string is:“:
my_string="Hello"
new_string=${my_string:1}
printf 'The modified string is: %s\n' "$new_string"
The modified string is: ello
Bei einem leeren oder ein Zeichen langen Wert ergibt ${my_string:1} eine leere Zeichenfolge. Der Ausdruck verarbeitet den Variablenwert und entfernt daher keine abschließenden Zeilenumbrüche wie eine Befehlsersetzung. Wenn der Wert bereits in einer Variablen steht, bleibt die Verarbeitung damit innerhalb von Bash; außerdem lässt sich der Offset leicht anpassen, falls Sie später weitere führende Zeichen entfernen möchten. Verwenden Sie die Parametererweiterung für eine Bash-Variable und sed oder cut, wenn Sie jede Eingabezeile umformen möchten. Wählen Sie das Werkzeug passend zur Eingabe: den nativen Ausdruck für eine einzelne Variable und einen zeilenorientierten Befehl für einen Datenstrom aus Datensätzen.