it-swarm.com.de

Großbuchstaben der ersten Wörter mit SED

Wie ersetzen Sie den ersten Buchstaben eines Wortes in Großbuchstaben, z.

Trouble me
Gold Rush brides

in 

Trouble Me
Gold Rush Brides
36
neversaint

Diese Zeile sollte es tun:

sed -e "s/\b\(.\)/\u\1/g"
62
tangens

awk verwenden:

awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1' file

Die Ausgabe wäre:

Trouble Me
Gold Rush Brides
21
ghostdog74

Verwenden Sie den folgenden sed-Befehl, um den ersten Buchstaben jedes Wortes in Großbuchstaben zu schreiben.

echo -e "Trouble me \nGold Rush brides" | sed -r 's/\<./\U&/g'

ausgabe

Trouble Me
Gold Rush Brides

Der Schalter -r weist sed an, erweiterte reguläre Ausdrücke zu verwenden. Die Anweisungen an sed geben dann an " s earch and replace" (die s am Anfang) das Muster \<. mit dem Muster \U& g lobally, dh alle Instanzen in jeder Zeile (das ist der Modifikator g am Ende). Das Muster, nach dem wir suchen, ist \<., das nach einem Wortgrenze (\<) gefolgt von beliebiges Zeichen (.). Das Ersetzungsmuster ist \U&, wobei \Used anweist, den folgenden Text in Großbuchstaben zu schreiben und &ein Synonym für \0 , das sich auf "alles bezieht, was übereinstimmt". In diesem Fall entspricht "alles, was abgeglichen wurde" genau dem ., da die Wortgrenzen in den Übereinstimmungen nicht enthalten sind (stattdessen handelt es sich um Anker ). Was mit . übereinstimmt, ist nur ein Zeichen. Dies ist also das, was in Großbuchstaben geschrieben steht.

13
rekha_sri

Eine weitere kürzere Version mit sed:

sed -e "s/\b./\u\0/g"
4
chtimi59

Ich hatte Apostrophe und arbeitete die erste Lösung aus ...

[email protected]:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed -e "s/\b\(.\)/\u\1/g"

Best Western Plus Bob'S Inn

[email protected]:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed "s/\( \|^\)\(.\)/\1\u\2/g"

Best Western Plus Bobs Inn

4
mikejonesey

Ich weiß, Sie sagten sed, aber für Shell-Skripte war Python die einfachste und flexiblere, die in den meisten Systemen verfügbar ist:

$ echo "HELLO WORLD" | python3 -c "import sys; print(sys.stdin.read().title())"
Hello World

Zum Beispiel:

$ lorem | python3 -c "import sys; print(sys.stdin.read().title())"
Officia Est Omnis Quia. Nihil Et Voluptatem Dolor Blanditiis Sit Harum. Dolore Minima Suscipit Quaerat. Soluta Autem Explicabo Saepe. Recusandae Molestias Et Et Est Impedit Consequuntur. Voluptatum Architecto Enim Nostrum Ut Corrupti Nobis.

Sie können auch Dinge wie strip() verwenden, um Leerzeichen zu entfernen, oder capitalize():

$ echo "  This iS mY USER ${USER}   " | python3 -c "import sys; print(sys.stdin.read().strip().lower().capitalize())"
This is my user jenkins
3
Havok

Die bisher vorgeschlagenen sed - Lösungen funktionieren nur, wenn der ursprüngliche Text in Kleinbuchstaben geschrieben ist. Obwohl man tr '[[:upper:]]' '[[:lower:]]' Um die Eingabe in Kleinbuchstaben zu normalisieren, kann es nützlich sein, eine All-in-One-Lösung sed zu haben:

sed 's/\w\+/\L\u&/g'

Dies passt zu Wörtern (\w bedeutet Wortzeichen und \+ mindestens ein und bis zum nächsten Nicht-Wort-Zeichen) und Kleinbuchstaben bis zum Ende (\L) aber Großbuchstaben des nächsten (d. h. ersten) Zeichens (\u) für jeden (g) übereinstimmenden Ausdruck (&).

[ Credits ]

Verwenden von sed mit tr :

name="athens"
echo $name | sed -r "s/^[[:alpha:]]/$(echo ${name:0:1} | tr [[:lower:]] [[:upper:]])/"
0
mark_infinite

Bash benutzen (ohne sed, also ein wenig off topic):

msg="this is a message"
for Word in $msg
do
   echo -n ${Word^} ""
done

This Is A Message
0
Dominique Baldo