How-to: String vorne oder hinten abschneiden #Shell #Scripting

Zur Datenanalyse mittels einem Shell Scriptes ist es häufig notwendig bestimmte Zeichen oder Zeichenkette (String) zu ermitteln. Dazu ist es meist hilfreich Strings (Zeichenketten) hinten oder vorne abzuschneiden zu können. Unter Unix bietet KornShell (ksh) die nachfolgend beschriebenen Möglichkeiten.

1. Zeichen von hinten abschneiden (rechts)

Ziel ist es den vorderen Teil des jeweiligen Strings zurückzugeben.

1.1. Entfernen des kürzest möglichen String von rechts [hinten] (%)

Mit einem eine Prozentzeichen (%) wird alles bis zum erstes vorkommen des Suchkriteriums (Pattern) von rechts (hinten) abgeschnitten, somit der kürzest möglichen String.

1.1.1. Beispiel (rechst abschneiden – erstes Vorkommen)

EXAMPLE_STRING= textstring.txt.dat 
echo ${ EXAMPLE _STRING %.*}

Ausgabe:

textstring.txt

Anmerkung: Alle zuerst gefunden Zeichen inklusive dem ersten Punkt werden mit dem Sternchen-Wildcard (*) von hinten (rechts) entfernt. So könnte z.B. der Filename ohne Extension ermittelt werden.

1.1.2. Beispiel alternative Pattern (rechts abschneiden)

Alternative Pattern, welche in dem Fall zum gleichen Ergebnis führen wie 1.1.1. führen.

echo ${ EXAMPLE _STRING %.???}
echo ${ EXAMPLE _STRING %.?a?}
echo ${ EXAMPLE _STRING %????}
echo ${ EXAMPLE _STRING %.dat}

Hinweis: Werden hier im Blog-Artikel, bei den anderen Varianten/Beispielen nicht mit angegeben, allerdings können die Pattern in ähnlicher Weise dort ebenfalls genutzt werden.

1.2. Entfernen des längst möglichen String von rechts [hinten] (%%)

Mit zwei Prozentzeichen (%%) werden alle Zeichen bis zum letzte möglichen Vorkommen des Suchkriteriums (Pattern) von rechts (hinten) entfernt, somit der längst möglichen String.

1.2.1. Beispiel (rechts abschneiden – letztes Vorkommen)

EXAMPLE_STRING= textstring.txt.dat
echo ${ EXAMPLE _STRING %%.*}

Ausgabe

textstring

Anmerkung: Alle Zeichen werden mit dem Sternchen-Wildcard (*)von hinten (rechts) entfernt; inklusive dem letzten möglichen Punkt.

2. Zeichen von vorne abschneiden (links)

Ziel ist es den rechten (hinteren) Teil eines jeweiligen Strings zurückzugeben und somit links (vorne) abzuschneiden.

2.1. Entfernen des kürzest möglichen Strings von links [vorne] (#)

Mit einem Hash-Zeichen bzw. Raute-Zeichen (#) wird alles inklusiv dem ersten vorkommen des Suchkriteriums (Pattern) von links (vorne) abgeschnitten, somit der kürzest möglichen String.

2.1.1. Beispiel (links abschneiden – erstes Vorkommen)

EXAMPLE_STRING="/path_text/text_string.txt.dat"
echo ${ EXAMPLE _STRING #*/}

Ausgabe:

path_text/text_string.txt.dat

Anmerkung: Alle Zeichen inklusive dem ersten Vorkommen des Slashes werden von links entfernt; also in dem Fall nur der erste Slash.

2.1.2. Beispiel (links abschneiden – erstes Vorkommen)

EXAMPLE_STRING="/path_text/text_string.txt.dat"
echo ${ EXAMPLE _STRING #*.}

Ausgabe:

dat.txt

2.2. Entfernen des längsten möglichen String von links [vorne] (##)

Mit zwei Hash-Zeichen bzw. Raute-Zeichen (##) wird alles inklusiv dem letzten möglichen vorkommen des Suchkriteriums (Pattern) von links (vorne) abgeschnitten, somit der kürzest möglichen String.

2.2.1. Beispiel (links abschneiden – letztes Vorkommen)

EXAMPLE_STRING="/path_text/text_string.txt.dat"
echo ${ EXAMPLE _STRING##*/}

Ausgabe:

text_string.txt.dat

Anmerkung: Alle Zeichen inklusive dem letzten möglichen Slash werden von links aus entfernt. So könnte z.B. ein Dateiname aus einem Pfad ermittelt werden.

2.2.2. Beispiel (links abschneiden – letztes Vorkommen)

EXAMPLE_STRING="/path_text/text_string.txt.dat"
echo ${ EXAMPLE _STRING##*.}

Ausgabe:

dat

Beschreibung: Alle Zeichen inklusive dem letzten möglichen Punkt werden von links entfernt.

Bildnachweis
Title-Bild: © teracreonte / Fotolia

Christian Hönick

Freiberuflicher IT Consultant, CEO, Entrepreneur & Founder. Seit mehr als 15 Jahren Erfahrung im B2B Bereich – speziell in der elektronischen Datenverarbeitung (EDI) sowie Web & App Entwicklung.

(Visited 127 times, 4 visits today)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.