Tipp: sed Upper- und Lowercase
Die Manual Page (man 1 sed
) bezeichnet den sed
als ‘Stream-EDitor zum Filtern und
Transformieren von Text’, womit das Einsatzgebiet genau beschrieben ist.
Was die Manual Page allerdings verschweigt ist, dass es auch nette Möglichkeiten innerhalb des GNU sed
gibt
um die Ausgaben auf der rechten Seite (RHS) einer Substitution (’s/von/nach/’) in Groß- oder Kleinbuchstaben
zu wandeln.
Nachzulesen ist der folgende Tipp in der Info - Page zum sed
(info sed
).
Im folgenden lassen wir aus dem Text der per echo
in den sed
geleitet wird zunächst komplett finden und
gegen den Text ‘woRLd’ tauschen:
user@linux ~ $ echo "Hello" | sed -e "s/.*/woRLd/"
woRLd
Nun modifizieren wir die Ausgabe mit dem Modifizierer \U
:
user@linux ~ $ echo "Hello" | sed -e "s/.*/\UwoRLd/"
WORLD
Wie zu sehen ist, wird die Ausgabe komplett in Großbuchstaben ausgegeben.
Um nur das erste Zeichen in einen Großbuchstaben zu wandeln gibt es den Modifizierer \u
:
user@linux ~ $ echo "Hello" | sed -e "s/.*/\uwoRLd/"
WoRLd
Leider bleiben die anderen Zeichen davon unberührt. Also müssen wir für alle Zeichen nach dem ersten Zeichen
auf Kleinbuchstaben mit dem Modifizierer \L
umschalten:
user@linux ~ $ echo "Hello" | sed -e "s/.*/\uw\LoRLd/"
World
Passend dazu gibt es auch noch den Modifizierer \l
der sich dann nur auf das folgende Zeichen auswirkt und es
in einen Kleinbuchstaben wandelt.
Um die Wandlung in Groß- und Kleinbuchstaben zu stoppen gibt es auch noch den Modifizierer \E
:
user@linux ~ $ echo "Hello" | sed -e "s/.*/\LwoR\ELd/"
worLd
Bis jetzt haben wir uns um den Text im Input nicht gekümmert. Das holen wir jetzt nach und speichern ihn in durch
die Klammern in ein Register. Dieses können wir dann auf der rechten Seite mittels \1
wieder abholen. Benutzen
wir mehrere Klammernpaare, dann bekommt das erste Paar das Register 1, das nächste das Register 2 und so weiter.
Der \
vor der öffnenden und schließenden Klammer wird benötigt, da wir es hier mit Basic Regular Expressions zu
tun haben in denen der die Klammern ()
und einige andere Zeichen zunächst als Literal gesehen und erst durch den
\
zu einem Zeichen des Regulären Ausdrucks gemacht werden. Mehr dazu in man 7 regex
.
user@linux ~ $ echo "Hello" | sed -e "s/\(.*\)/\1/"
Hello
Nun können wir unsere Modifizierer auf unseren Text anwenden:
user@linux ~ $ echo "Hello" | sed -e "s/\(.*\)/\L\1/"
hello
user@linux ~ $ echo "Hello" | sed -e "s/\(.*\)/\U\1/"
HELLO
Fassen wir die Modifizierer zusammen:
\L
: Alles folgende in Kleinbuchstaben wandeln.\l
: Das folgende Zeichen in Kleinbuchstaben wandeln.\U
: Alles folgende in Großbuchstaben wandeln.\u
: Das folgende Zeichen in Großbuchstaben wandeln.\E
: Keine weiteren Wandlungen durchführen.