Ersten Buchstaben in ein GROSSEN umwandeln 15. Juli 2006

BlogBasti

Manchmal ist es nötig in einem Shell-Skript einen String so zu bearbeiten, dass der erste Buchstabe durch den jeweiligen großen ersetzt wird. Es ist gar nicht so leicht. Ich habe versucht es in einem SED-Befehl hinzubekommen. Es ist mir leider nicht gelungen. Wer mich kennt, weiss aber das ich nie aufgebe. Also habe ich folgende Lösung in der Skriptsprache BASH:

#
# Das erste Zeichen des Strings $kleiner_string extrahieren
#
erstes_zeichen=$(echo ${kleiner_string} | sed -e ’s/\([abcdefghijklmnopqrstuvwxyz]\).*/\1/’)

#
# Den Rest des Strings $kleiner_string extrahieren
#
rest_von_kleiner_string=$( echo ${kleiner_string} | sed -e ’s/^’${erstes_zeichen}’//’ )

#
# Nun das $erste_zeichen in den jeweiligen Großbuchstaben umwandeln
#
erstes_zeichen_gross=$(echo ${erstes_zeichen} | tr [a-z] [A-Z] )

#
# Zum Schuß den Strings mit dem großen ersten Zeichen wieder zusammensetzen
#
grosser_string=${erstes_zeichen_gross}${rest_von_kleiner_string}

In der Variablen $grosser_string ist nun der Wert der Variablen $kleiner_string mit großem Anfangsbuchstaben. Ziel erreicht. ;-) Um diese Funktionalität in Shell-Skripten noch besser nutzen zu können, bietet es sich an eine Funktion zu definieren. Die Funktion könnte so aussehen:

#
# Funktion zum umwandeln des ersten Buchstaben in den jeweiligen grossen

function first_char_2_upper {
#
# Parameter der Funktion abfragen
kleiner_string=$1

#
# kontrollieren ob Funktion mit Parameter aufgerufen wurde
if [ ${#kleiner_string} -gt 0 ] ; then

erstes_zeichen=$(echo ${kleiner_string} | sed -e ’s/\([abcdefghijklmnopqrstuvwxyz]\).*/\1/’)

rest_von_kleiner_string=$( echo ${kleiner_string} | sed -e ’s/^’${erstes_zeichen}’//’ )

erstes_zeichen_gross=$(echo ${erstes_zeichen} | tr [a-z] [A-Z] )

#
# Feritgen String ausgeben und Funktion mit Erfolgs-Rueckgabewert beenden
#
echo “${erstes_zeichen_gross}${rest_von_kleiner_string}”
return 0

else
# Funktion mit Fehler-Rueckgabewert beenden
return 1
fi
}

Der Aufruf dieser Funktion ist nun ganz leicht. Hier ein Beispiel-Skript:

#!/bin/bash
#
#

# Definition der Funktionen

#
# Funktion zum umwandeln des ersten Buchstaben in den jeweiligen grossen
#

function first_char_2_upper {
#
# Parameter der Funktion abfragen
kleiner_string=$1

#
# kontrollieren ob Funktion mit Parameter aufgerufen wurde
if [ ${#kleiner_string} -gt 0 ] ; then

erstes_zeichen=$(echo ${kleiner_string} | sed -e ’s/\([abcdefghijklmnopqrstuvwxyz]\).*/\1/’)

rest_von_kleiner_string=$( echo ${kleiner_string} | sed -e ’s/^’${erstes_zeichen}’//’ )

erstes_zeichen_gross=$(echo ${erstes_zeichen} | tr [a-z] [A-Z] )

#
# Feritgen String ausgeben und Funktion mit Erfolgs-Rueckgabewert beenden
#
echo “${erstes_zeichen_gross}${rest_von_kleiner_string}”
return 0

else
# Funktion mit Fehler-Rueckgabewert beenden
return 1
fi
}

#
# Programm
#

variable=”mein Skript”

gross=$(first_char_2_upper “$variable”)

echo “Variable vorher: $variable”
echo “Variable nacher: $gross”

#
# Ende des Skripts
#

Ich hoffe ich konnte verständlich zeigen wie es funktioniert.

 
 
Tags
Online
Ähnliche Tags
Feedback
Trackback

Ihr Feedback ist erwünscht!

    4 Kommentare zu “Ersten Buchstaben in ein GROSSEN umwandeln”

  1. kruemeltee Mai 11th, 2011 at 7:55 | #

    Hallöchen Basti,

    ich habe ebenfalls nach einer lösung gesucht und eine gefunden. Meine Aufgabenstellung war es, einen String wie “vorname.nachname” in “Vorname Nachname” umzuändern. ggf. noch ein “vorname-vorname2.nachname” in ein “Vorname-Vorname2 Nachname” umzuwandeln. Ich habs mit sed hinbekommen … folgendermaßen bin ich vorgegangen:

    echo klaus.peters | sed ’s/\./\ /g; s/^[a-z]/\U&/; s/\( [a-z]\)\([a-z].*\)/\U\1\E\2/1′

    das erste sed (s/\./\ /g) ersetzt mir den Punkt
    das zweite sed (s/^[a-z]/\U&/) sucht nach dem ersten Buchstaben und macht ihn groß
    das dritte sed (s/\( [a-z]\)\([a-z].*\)/\U\1\E\2/1) sucht nach dem ersten Buchstaben nach einem Leerzeichen und macht ihn groß

    um nun noch ggf. Doppelnamen mit Bindestrichen zu ersetzen kommt einfach noch ein viertes sed hinzu, genau wie das dritte, nur nicht mit Leerzeichen sondern mit Bindestrich. Ist kein Bindestrich, also kein Doppelname, enthalten, so erfolgt auch keine Umwandlung :-)

    mit freundlichen Grüßen
    kruemeltee

    P.S.: was mir sehr geholfen hat ist folgende Seite:
    http://www.grymoire.com/Unix/Sed.html

  2. Golem August 3rd, 2009 at 13:21 | #

    new_string=$(echo $1 | cut -c -1 | tr [a-z] [A-Z])$(echo $1 | sed s/^.//)

  3. basti Juli 16th, 2006 at 9:28 | #

    nein. Ich habe auf Arbeit ein eMail-Client bei dem man den Mailbox-Namen dahinter angeben muss. Nun beginnen bei mir aber einige Boxen mit einem Großbuchstaben und einige nicht. Also probiert ein Skript von mir, welche der Varianten existiert. Dafür brauchte ich diese Umwandlung.

  4. silo2001 Juli 15th, 2006 at 21:32 | #

    Bist Du auf das Problem gestoßen als Du eines Deiner Hefte aus dem Stapel lösen wolltest/mußtest/durftest/wasauchimmer? ;)

Dieser Eintrag wurde geschrieben am Samstag, Juli 15th, 2006 um 12:43. Sie können der Diskussion folgen mit dem RSS 2.0 Feed. Wenn Sie sich fragen, woher die Icons neben manchen Kommentaren stammen, besuchen Sie gravatar.com und erstellen Sie Ihren eigenen Gravatar.
blogbasti.de wird angetrieben von Wordpress und Squible.
Alle Inhalte sind urheberrechtlich geschützt.