Gibt es eine Möglichkeit, nur ein Zeichen in einer Zeichenfolge in Groß- / Kleinschreibung zu schreiben?
Eingabebeispiel:
syslog_apr_24_30
syslog_mar_01_17
Gewünschte Ausgabe:
syslog_Apr_24_30
syslog_Mar_01_17
Beachten Sie bitte den Großbuchstaben Anfang des Monats.
Ich habe es versucht, awk
aber ich bin nicht gut genug, um es zum Laufen zu bringen.
sed 's/_./\U&/'
awk:
quelle
Awk
Version mit Teilstrings und TopperProbelauf:
quelle
Verwenden von
awk
:oder
Beispiel
quelle
Hier ist ein Perl-Ansatz:
Das
-p
bewirkt, dass jede Zeile gedruckt wird, nachdem das von angegebene Skript angewendet wurde-e
. Die Ersetzung ersetzt die erste Instanz von_
und das darauf folgende Zeichen durch sich selbst ($&
was auch immer gefunden wurde). Großbuchstaben (uc()
). Dere
Operator (s///e
) am Ende der Ersetzung wird benötigt, um Ausdrücke auszuwerten.quelle
Ein anderer
perl
:quelle
Pure Bash 4.x verwendet einen regulären Ausdruck, um den Teil, den Sie in Großbuchstaben
^^
schreiben möchten, und den Operator in Großbuchstaben für diesen Teil auszuwählen. Heften an Vorder- und Rückseite (mit. *), Um die gesamte Zeichenfolge neu zu erstellen:Wenn Sie sich nicht an alle Anführungsregeln erinnern, ist es sicher, alles mit Ausnahme des regulären Ausdrucks zu zitieren
=~
einer wörtlichen Zeichenfolgenübereinstimmung führen .Der
^
Operator upcase-first steht nur am Anfang einer Variablen (oder eines Array-Elements). Und es scheint keine Teilstringerweiterung zu geben, die Ihnen einen Wert gibt, den Perl als l-Wert bezeichnen würde (den Sie zuweisen / ändern können). Die Operatoren für Groß- und Kleinschreibung können ein Muster verwenden, das auf Zeichenbasis abgeglichen wird, das Überspringen hilft jedoch nichtsyslog_
, da es Monatsnamen gibt, die mit Zeichen in "syslog" beginnen.Auf jeden Fall könnte dies schneller sein als
foo="$(echo "$foo" | sed 's/_./\U&/')"
(gepostet als Kommentar zur akzeptierten Antwort von Glenn Jackman).Bash, sed oder awk sind VIELE Male schneller als Perl. Wenn Sie anfangen, in einem Shell-Skript mehrere Perl-Einzeiler zu finden, sollten Sie das Ganze einfach in Perl schreiben.
quelle
Wenn der Monat immer auf das erste "_" (Unterstrich) folgt, verwenden Sie dies (wie in anderen Antworten gezeigt):
Wenn vor dem Monat andere Unterstriche angezeigt werden, funktioniert das oben Genannte nicht.
Wenn der Monat immer mit dem achten Zeichen beginnt, verwenden Sie Folgendes:
quelle