• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Suse - SED Befehl auf zusammenhängenden Ausdruck anwenden

Hallo,

ich experimentiere etwas mit sed rum, weil ich das gerne beherrschen würde und nun bin ich bei einer wohl einfachen Aufgabe stehen geblieben, die ich aber nicht lösen kann:

Ich möchte aus dem Ausdruck "1234_test" ein "1234_Test" machen und ein weiteres mal aus "test_1234" ein "test_5678".
Also so etwas in der Art "echo 1234_test | sed 's/....:" doch wie gehts weiter? Wie soll der Suchstring aussehen, damit ich die Zahlen von den Buchstaben und dem Unterstrich trennen kann?
Kann mir hierzu Jemand Hilfestellung leisten?
 
Na ja, Dein Suchkriterium ist nicht gerade präzise angegeben:
Code:
echo 1234_test | sed 's/1234_test/1234_Test/'
echo test_1234 | sed 's/test_1234/test_5678/'
ginge z.B. Aber wolltest Du das?
 

framp

Moderator
Teammitglied
Oder
Code:
echo "1234_test" | sed 's/\(.*\)_\(.\)\(.*\)/\1_\U\2\E\3/'
um den ersten Buchstaben nach dem _ zu uppercasen ?
 
framp schrieb:
Oder
Code:
echo "1234_test" | sed 's/\(.*\)_\(.\)\(.*\)/\1_\U\2\E\3/'
um den ersten Buchstaben nach dem _ zu uppercasen ?

Einfacher zu lesen wäre es, wenn man sed mit dem Parameter "-r" aufruft, dann kann man sich das Escapen der Klammern sparen. :)
 

framp

Moderator
Teammitglied
spoensche schrieb:
...Einfacher zu lesen wäre es, wenn man sed mit dem Parameter "-r" aufruft, dann kann man sich das Escapen der Klammern sparen. :)
Danke für den Hinweis. Man lernt eben nie aus :roll:
 
Hallo,
das
Code:
echo "1234_test" | sed 's/\(.*\)_\(.\)\(.*\)/\1_\U\2\E\3/'
ist an sich genau , was ich brauche, aber ich verstehe nicht, wofür das "\E" steht und warum es unter "man sed" nicht aufgeführt ist.
 
Rumak18 schrieb:
...ich verstehe nicht, wofür das "\E" steht und warum es unter "man sed" nicht aufgeführt ist.
Code:
man sed:
...
 info sed
       should give you access to the complete manual.
...

info sed
...
* The "s" Command::
...
`\L'
     Turn the replacement to lowercase until a `\U' or `\E' is found,

`\l'
     Turn the next character to lowercase,

`\U'
     Turn the replacement to uppercase until a `\L' or `\E' is found,

`\u'
     Turn the next character to uppercase,

`\E'
     Stop case conversion started by `\L' or `\U'.

Haveaniceday
 
Hi,

nur als Ergänzung, das Umwandeln in Großbuchstaben macht man bequemer mit tr
Code:
echo "1234_test" | tr 'a-z' 'A-Z'
# oder
echo "1234_test" |  tr '[:lower:]' '[:upper:]'
Gruß
Georg
 
Hallo P6CNAT,
P6CNAT schrieb:
Hi,

nur als Ergänzung, das Umwandeln in Großbuchstaben macht man bequemer mit tr
Code:
echo "1234_test" | tr 'a-z' 'A-Z'
# oder
echo "1234_test" |  tr '[:lower:]' '[:upper:]'
Aber das ersetzt j alle Kleinbuchstaben durch Großbuchstaben, was ist mit Kapitälchen (heißt doch so oder?)?
lieben Gruß aus Hessen
 
Hi,
Herz-von-Hessen schrieb:
was ist mit Kapitälchen
mmh, ich verstehen nicht recht worauf du hinaus willst. Rumak hat keine Kapitälchen erwähnt.

Kapitälchen sind Großbuchstaben deren Höhe auf die von Kleinbuchstaben begrenzt ist. Intern werden die als Kleinbuchstaben gespeichert, die Darstellung als Großbuchstaben erfolgt durch den Zeichensatz. Die werden dann natürlich auch umgewandelt. sed würde die auch umwandeln.

Gruß
Georg
 
Oben