Konvertierung Klein/Gross-Schreibung
Hallo Leute, ich komm' einfach nicht mehr drauf. Gab es nicht ein Kommandozeilen-Tool, das aus kleinen Buchstaben große macht und aus großen Buchstaben kleine? Davon wurde mal in einer Etiketten-Diskussion regen Gebrauch gemacht und ich sollte es genau zu einem solchen Zweck haben. Helga -- ## Content Developer OpenOffice.org: lang/DE ## Office-Suite für Linux, Mac, Windows -- http://de.openoffice.org/ ## OpenOffice.org1.0.1 jetzt auch als deutsches Release erhältlich ## Netikette, nein Danke? -- http://www.suse-etikette.de.vu/
Am Mon, 07 Okt 2002 schrieb Helga Fischer:
ich komm' einfach nicht mehr drauf. Gab es nicht ein Kommandozeilen-Tool, das aus kleinen Buchstaben große macht und aus großen Buchstaben kleine?
tr vielleicht? Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Hallo Helga, suchst Du soetwas ? TRUL='tr "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"' SIDADM="`echo $SAPSYSTEMNAME | $TRUL`adm" Grusz, Ole Helga Fischer schrieb:
Hallo Leute,
ich komm' einfach nicht mehr drauf. Gab es nicht ein Kommandozeilen-Tool, das aus kleinen Buchstaben große macht und aus großen Buchstaben kleine?
Davon wurde mal in einer Etiketten-Diskussion regen Gebrauch gemacht und ich sollte es genau zu einem solchen Zweck haben.
Helga
* On Mon, 07 Oct 2002 at 13:12 +0200, Ole Thomsen wrote: [Quoting repariert]
Helga Fischer schrieb:
ich komm' einfach nicht mehr drauf. Gab es nicht ein Kommandozeilen-Tool, das aus kleinen Buchstaben große macht und aus großen Buchstaben kleine?
Davon wurde mal in einer Etiketten-Diskussion regen Gebrauch gemacht und ich sollte es genau zu einem solchen Zweck haben.
TRUL='tr "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"' SIDADM="`echo $SAPSYSTEMNAME | $TRUL`adm"
Ach nee, die SAP übt sich wieder mal in Umständlichkeiten? Zumindest das GNU-tr kann das einfacher: adalbert@pepe:~ > echo Testtext | tr a-z A-Z TESTTEXT -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
Adalbert Michelic
echo Testtext | tr a-z A-Z
Tja, nur funktioniert das, so wie gedacht, nur mit LANG=C, sprich mit ASCII-Zeichensatz. Bei gesetzter locale (vor allem LC_COLLATE) und nationalen Sonderzeichen sieht das Ergebnis ganz anders aus. Daher sollte man immer die Zeichen-Klassen (character classes) wie [:lower:] oder [:alnum:] verwenden. Philipp -- Philipp Thomas Arbeit: pthomas@suse.de Entwicklung, SuSE Linux AG Privat: pth@t-link.de
* On Mon, 07 Oct 2002 at 23:52 +0200, Philipp Thomas wrote:
Adalbert Michelic
[7 Okt 2002 13:29:03]: echo Testtext | tr a-z A-Z
Tja, nur funktioniert das, so wie gedacht, nur mit LANG=C, sprich mit ASCII-Zeichensatz. Bei gesetzter locale (vor allem LC_COLLATE) und nationalen Sonderzeichen sieht das Ergebnis ganz anders aus. Daher sollte man immer die Zeichen-Klassen (character classes) wie [:lower:] oder [:alnum:] verwenden.
Ich habe eigentlich nur das nachgebaut, was SAP sehr umständlich vorgebaut hat - a-z in A-Z umsetzen. Wenns wer weitergehend verwenden will, kann er gern in man tr reinschauen :-) -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
On Mon, 07 Oct 2002 at 10:37 (+0200), Helga Fischer wrote:
ich komm' einfach nicht mehr drauf. Gab es nicht ein Kommandozeilen-Tool, das aus kleinen Buchstaben große macht und aus großen Buchstaben kleine?
Davon wurde mal in einer Etiketten-Diskussion regen Gebrauch gemacht und ich sollte es genau zu einem solchen Zweck haben.
Es wurden ja schon einige Lösungen vorgeschlagen, die sind alle recht nett nur leider umbrauchbar, da sie mit Umlauten nicht zurecht kommen. Vorschlag: perl -pe 'use locale;s#(\w)#$x=$1;($x=~/[[:lower:]]/)? uc($x) : lc($1)#eg' Aus Täst wird z. B. tÄST (so habe ich die Frage verstanden). Ich höre jetzt schon den Aufschrei, dass Perl ja viel zu umständlich sei für sowas und awk oder sonstwas doch tausendmal ressourcenschonender ist etc. ... Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Geld ist besser als Armut - wenn auch nur aus finanziellen Gründen. -- Woody Allen
Hallo Bernd, Am Montag, 7. Oktober 2002 14:32 schrieb Bernhard Walle:
On Mon, 07 Oct 2002 at 10:37 (+0200), Helga Fischer wrote:
ich komm' einfach nicht mehr drauf. Gab es nicht ein Kommandozeilen-Tool, das aus kleinen Buchstaben große macht und aus großen Buchstaben kleine?
Es wurden ja schon einige Lösungen vorgeschlagen, die sind alle recht nett nur leider umbrauchbar, da sie mit Umlauten nicht zurecht kommen.
Vorschlag:
perl -pe 'use locale;s#(\w)#$x=$1;($x=~/[[:lower:]]/)? uc($x) : lc($1)#eg'
Fein, ein bißchen Perl.
Aus Täst wird z. B. tÄST (so habe ich die Frage verstanden).
Stimmt, genau so hatte ich es gemeint. Bei passender Gelegenheit will ich doch noch eine schöne Mail loswerden, die so richtig leserlich ist *ggg*
Ich höre jetzt schon den Aufschrei, dass Perl ja viel zu umständlich sei für sowas und awk oder sonstwas doch tausendmal ressourcenschonender ist etc. ...
Egal, bei mir läuft Perl immer, also nehme ich diesen netten Einzahler dankend an. (tr merke ich mir auch, diese Lösung ist jedoch die geeignetere). Helga -- ## Content Developer OpenOffice.org: lang/DE ## Office-Suite für Linux, Mac, Windows -- http://de.openoffice.org/ ## OpenOffice.org1.0.1 jetzt auch als deutsches Release erhältlich ## Netikette, nein Danke? -- http://www.suse-etikette.de.vu/
Hallo, On Mon, 07 Oct 2002, Helga Fischer wrote:
Hallo Bernd,
Du meinst Bernhard, oder? ;)
Am Montag, 7. Oktober 2002 14:32 schrieb Bernhard Walle:
On Mon, 07 Oct 2002 at 10:37 (+0200), Helga Fischer wrote:
ich komm' einfach nicht mehr drauf. Gab es nicht ein Kommandozeilen-Tool, das aus kleinen Buchstaben große macht und aus großen Buchstaben kleine?
Es wurden ja schon einige Lösungen vorgeschlagen, die sind alle recht nett nur leider umbrauchbar, da sie mit Umlauten nicht zurecht kommen.
Was is'n dein tr fuer ein Teil??? Mein tr kann das. $ tr --version tr (GNU textutils) 2.0.10
Vorschlag:
perl -pe 'use locale;s#(\w)#$x=$1;($x=~/[[:lower:]]/)? uc($x) : lc($1)#eg'
Fein, ein bißchen Perl.
Aber ueberfluessig *eg* (und ja, ich mag perl! Ziemlich sogar :)
Aus Täst wird z. B. tÄST (so habe ich die Frage verstanden).
Stimmt, genau so hatte ich es gemeint. Bei passender Gelegenheit will ich doch noch eine schöne Mail loswerden, die so richtig leserlich ist *ggg*
$ echo 'Täst' | tr '[:lower:][:upper:]' '[:upper:][:lower:]' tÄST $ echo $LANG en_US.ISO_8859-15 d.h. tr kann sogar bei en_US damit umgehen! Aus 'tr --help': ==== Usage: tr [OPTION]... SET1 [SET2] [..] SETs are specified as strings of characters. Most represent themselves. Interpreted sequences are: [..] CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order [CHAR*] in SET2, copies of CHAR until length of SET1 [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0 [:alnum:] all letters and digits [:alpha:] all letters [:blank:] all horizontal whitespace [:cntrl:] all control characters [:digit:] all digits [:graph:] all printable characters, not including space [:lower:] all lower case letters [:print:] all printable characters, including space [:punct:] all punctuation characters [:space:] all horizontal or vertical whitespace [:upper:] all upper case letters [:xdigit:] all hexadecimal digits [=CHAR=] all characters which are equivalent to CHAR [..] ==== Der Witz ist: Auch perl hat ein 'tr' operator (als alias fuer 'y'): perl -pe 'y/a-z/A-Z/' oder perl -pe 'tr/a-z/A-Z/' und aehnliches... Aber obiges à la 'tr' geht dann doch nicht, da perl scheinbar die Charakterklassen dort nicht interpretiert... -dnh -- "You know, I'm almost convinced that Matt is just the Australian branch office of me." -- Dave Brown, clearly disturbed.
* David Haller schrieb am 07.Okt.2002:
$ echo 'Täst' | tr '[:lower:][:upper:]' '[:upper:][:lower:]' tÄST $ echo $LANG en_US.ISO_8859-15
d.h. tr kann sogar bei en_US damit umgehen!
imho ist das ein flsaches Verhalten.
Aus 'tr --help': ==== Usage: tr [OPTION]... SET1 [SET2] [..] SETs are specified as strings of characters. Most represent themselves. Interpreted sequences are: [..] CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order [CHAR*] in SET2, copies of CHAR until length of SET1 [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0 [:alnum:] all letters and digits [:alpha:] all letters [:blank:] all horizontal whitespace [:cntrl:] all control characters [:digit:] all digits [:graph:] all printable characters, not including space [:lower:] all lower case letters [:print:] all printable characters, including space [:punct:] all punctuation characters [:space:] all horizontal or vertical whitespace [:upper:] all upper case letters [:xdigit:] all hexadecimal digits [=CHAR=] all characters which are equivalent to CHAR
Funktioniert aber auch nur bei [:lower:] und [:upper:] Was anderes wäre ja auch merkwürdig, was soll ein tr [:cntr:] [:digit:] auch machen? Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
Hallo, On Tue, 08 Oct 2002, Bernd Brodesser wrote:
* David Haller schrieb am 07.Okt.2002:
$ echo 'Täst' | tr '[:lower:][:upper:]' '[:upper:][:lower:]' tÄST $ echo $LANG en_US.ISO_8859-15
d.h. tr kann sogar bei en_US damit umgehen!
imho ist das ein flsaches Verhalten.
Fieso? ISO-8859-15 enhaelt nunmal auch die Umlaute in "upper" und "lower", da ist es IMHO korrekt die auch umzusetzen. [..]
Funktioniert aber auch nur bei [:lower:] und [:upper:]
*hrmpf* stimmt.
Was anderes wäre ja auch merkwürdig, was soll ein tr [:cntr:] [:digit:] auch machen?
Das gleiche was ein tr '\r\n\b\a...' '1234...' macht... -dnh -- Why use windows, when there's a door?
auch diese Antwort bitte asl **off-topic** markieren ;-) On Mon, 7 Oct 2002, David Haller wrote:
Was is'n dein tr fuer ein Teil??? Mein tr kann das. $ tr --version tr (GNU textutils) 2.0.10
perl -pe 'use locale;s#(\w)#$x=$1;($x=~/[[:lower:]]/)? uc($x) : lc($1)#eg'
$ echo 'Täst' | tr '[:lower:][:upper:]' '[:upper:][:lower:]' tÄST $ echo $LANG en_US.ISO_8859-15
==== Usage: tr [OPTION]... SET1 [SET2] [..] SETs are specified as strings of characters. Most represent themselves. Interpreted sequences are: [..] CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order [CHAR*] in SET2, copies of CHAR until length of SET1 [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0 [:alnum:] all letters and digits [:alpha:] all letters [:blank:] all horizontal whitespace [:cntrl:] all control characters [:digit:] all digits [:graph:] all printable characters, not including space [:lower:] all lower case letters [:print:] all printable characters, including space [:punct:] all punctuation characters [:space:] all horizontal or vertical whitespace [:upper:] all upper case letters [:xdigit:] all hexadecimal digits [=CHAR=] all characters which are equivalent to CHAR [..] ====
Der Witz ist: Auch perl hat ein 'tr' operator (als alias fuer 'y'):
perl -pe 'y/a-z/A-Z/' oder perl -pe 'tr/a-z/A-Z/'
und aehnliches... Aber obiges à la 'tr' geht dann doch nicht, da perl scheinbar die Charakterklassen dort nicht interpretiert...
ich habe aus der mail nur das Wesentlich stehen lassen. Ohne jemanden zu nahe zu tretten wuerde ich die diversen Kommentare und Vorschlaege einfach unter das bekannte Zitat: "den sie wissen nicht was sie tun" einordnen. RTFM ist nicht genug. Wenn man meint es verstanden zu haben, dann probiert man es aus und stellt fest dass es doch anders ist :-o Nun, das ist eine Linux Liste, ein Teil meine Erklaerungen ist darum wohl fuer die meisten nicht relevant, zum Verstaendnis aber vielleicht hilfreich. Ich will nicht sagen dass die Aussagen falsch sind, aber richtig sind sie i.A. auch nicht (ausser bei der perl Loesung mit lc und uc, da bin ich nicht sicher). Also zu den Fakten: 1. GNU tr kennt die SETs (Term uebernommen aus der man-page) 2. perl arbeitet mit POSIX character class 3. "tr a-z A-Z" bzw. "perl -e tr/a-z/A-Z/" liefern unzuverlaessige Ergebnisse 4. das Environment ist von Bedeutung 5. die libc und/oder libregex ist von Bedeutung 6. "POSIX character class" sind etwas anderes als "character class" in regulaeren Ausdruecken (tr, perl), bitte nicht verwechseln Mit anderen Worten: man weis eigentlich gar nicht so genau was passiert. Ausser vielleicht bei: env LANG=C perl -Ulocale ... Erklaerung: 1. GNU tr benutzt auch die POSIX character class 2. perl benutzt auch die POSIX character class (aber nicht bei tr/ und y/ wenn nicht explizit angegeben) 3. ist abhaengig vom Zeichensatz, z.B. ASCII oder EBCDIC 4. z.B. LANG, LD_LIBRARY_PATH, /etc/ldconfig.conf 5. Version der Libs, bzw. static vs. dynamically liked Programme (tr, perl) 6. die tr man-page umgeht das geschickt indem sie SET verwendet Beispiele: - wenn man tr a-z A-Z auf einem System mit EBSDIC benutzt, kommt sicher nicht die Konvertierung von Klein nach Gross raus echo abcdefghijklmnopqrstuvwxyz123456789|dd conv=ebcdic|tr a-z A-Z aber echo abcdefghijklmnopqrstuvwxyz123456789|dd conv=ebcdic|dd conv=ucase - wenn LANG=RU eingestellt ist, und der Zeichensatz KOI8R darf man auch ueberrascht sein - man hat ein static linked tr (warumauchimmer) in der die eingebundene libc und/oder libregex noch nicht voll POSIX konform war Zur Kompletierung der Verwirrung noch: echo Müll|dd conv=ucase (unterliegt natuerlich den gleichen Einschraenkungen) Ach so, wer noch mehr solche obskuren Beispiele braucht, sollte mal in Jeffrey Friedls "Regular Expressions" reinschauen (gibts irgendwo auch im Internet). Trotzdem: don't panic da wir (fast) alle in der ASCII-POSIX-Welt leben und arbeiten, und nicht irgendwo im Cafe Millyway, haette ich mir die ganzen Ausfuehrungen sparen koennen. Viel Spass beim Ausprobieren :-)) Achim
On 7 Oct 2002 at 14:32, Bernhard Walle wrote:
On Mon, 07 Oct 2002 at 10:37 (+0200), Helga Fischer wrote:
ich komm' einfach nicht mehr drauf. Gab es nicht ein Kommandozeilen-Tool, das aus kleinen Buchstaben große macht und aus großen Buchstaben kleine?
Davon wurde mal in einer Etiketten-Diskussion regen Gebrauch gemacht und ich sollte es genau zu einem solchen Zweck haben.
Es wurden ja schon einige Lösungen vorgeschlagen, die sind alle recht nett nur leider umbrauchbar, da sie mit Umlauten nicht zurecht kommen.
Vorschlag:
perl -pe 'use locale;s#(\w)#$x=$1;($x=~/[[:lower:]]/)? uc($x) : lc($1)#eg'
Aus Täst wird z. B. tÄST (so habe ich die Frage verstanden).
Ich höre jetzt schon den Aufschrei, dass Perl ja viel zu umständlich sei für sowas und awk oder sonstwas doch tausendmal ressourcenschonender ist etc. ...
... und viel einfacher :-) echo "Bölkstoff für Alle" | tr '[:upper:][:lower:]' '[:lower:][:upper:]' da ist nicht mal ein Aufschrei nötig *g* Jan
participants (10)
-
Achim Hoffmann
-
Adalbert Michelic
-
B.Brodesser@t-online.de
-
Bernhard Walle
-
Christoph Maurer
-
David Haller
-
Helga Fischer
-
Jan.Trippler@t-online.de
-
Ole Thomsen
-
Philipp Thomas