Folgendes Problem: Ich habe einen utf-8-Text der lateinische und griechische Zeichen enthält, also zB VAR1="blaγκbla" VAR2="γκbla" Nun möchte ich mich sed bedingt ersetzen, und zwar wenn γκ in der _Mitte_ eines Wortes steht, dann soll "γκ" durch "ng" ersetzt werden, also im Beispiel: "blangbla". Steht "γκ" am _Anfang_, dann soll "γκ" durch "g" ersetzt werden. Im Beispiel soll also dann "gbla" entstehen. Das löst man wohl mit einem regulären Ausdruck. Kann bitte wer konkret helfen? Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Don, 22 Feb 2007, Al Bogner schrieb:
Folgendes Problem:
Ich habe einen utf-8-Text der lateinische und griechische Zeichen enthält, also
zB VAR1="bla????bla" VAR2="????bla"
Nun möchte ich mich sed bedingt ersetzen, und zwar wenn ???? in der _Mitte_ eines Wortes steht, dann soll "????" durch "ng" ersetzt werden, also im Beispiel: "blangbla". Steht "????" am _Anfang_, dann soll "????" durch "g" ersetzt werden. Im Beispiel soll also dann "gbla" entstehen. Das löst man wohl mit einem regulären Ausdruck.
Voraus: Bei mir klappt das mit UTF-8 nicht so recht, ersetze die γκ also sinngemäß durch das richtige Zeichen. Wobei ich mir nicht sicher bin, wie sed mit UTF-8 umgeht. Ggfs. kann man mit den hexcodes arbeiten. VAR1="blaγκbla" VAR2="γκbla" echo "$VAR2 $VAR1 $VAR2" | sed 's/\(^\|[[:space:]]\)γκ/\1g/g; s/\([^[:space:]]\)γκ/\1ng/g' $ echo "γκbla blaγκbla γκbla blaγκbla γκbla γκbla" | sed 's/\(^\|[[:space:]]\)γκ/\1g/g; s/\([^[:space:]]\)γκ/\1ng/g' gbla blangbla gbla blangbla gbla gbla BTW: generell ist Transliteration per script extrem schwierig. Wie willst du ein gamma transliterieren? Bei der Tabelle zu meinem Atlas finde ich: gamma g vor alpha, omikron, omikron ni, omega und Konsonanten außer gamma, xi und chi y vor alpha iota, epsilon, epsilon iota, ita, iota, omikron iota, ni, ni iota n vor gamm, xi und chi gamma kappa g am Wortanfang ng nicht am Wortanfang *hehe*, HTH, -dnh -- Er will sie nicht? Er, will sie nicht? Er will, sie nicht? Er will sie, nicht? -- Sascha Broich -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Freitag, 23. Februar 2007 01:41 schrieb David Haller: Hallo David,
Am Don, 22 Feb 2007, Al Bogner schrieb:
Folgendes Problem:
Ich habe einen utf-8-Text der lateinische und griechische Zeichen enthält, also
zB VAR1="bla????bla" VAR2="????bla"
Nun möchte ich mich sed bedingt ersetzen, und zwar wenn ???? in der _Mitte_ eines Wortes steht, dann soll "????" durch "ng" ersetzt werden, also im Beispiel: "blangbla". Steht "????" am _Anfang_, dann soll "????" durch "g" ersetzt werden. Im Beispiel soll also dann "gbla" entstehen. Das löst man wohl mit einem regulären Ausdruck.
Voraus: Bei mir klappt das mit UTF-8 nicht so recht, ersetze die γκ also sinngemäß durch das richtige Zeichen. Wobei ich mir nicht sicher bin, wie sed mit UTF-8 umgeht. Ggfs. kann man mit den hexcodes arbeiten.
Ich denke sed und utf-8 passt bei griechischen Zeichen mit 10.2 schon. sed --version GNU sed Version 4.1.5
VAR1="blaγκbla" VAR2="γκbla" echo "$VAR2 $VAR1 $VAR2" | sed 's/\(^\|[[:space:]]\)γκ/\1g/g; s/\([^[:space:]]\)γκ/\1ng/g'
Vermutlich mache ich eine Kleinigkeit falsch, es passiert nicht das Gewünschte. Sollte man nicht sed -e nehmen? Aber auch damit klappt es nicht. Ich bringe ein anderes Beispiel und eigentlich sollte es egal sein, ob griechische Zeichen dabei sind. Ich bringe ein anderes Beispiel, weil vielleicht nicht klar rüber kam, was ich will. zB in UTF-8: γκρουπ ταγκό πάρκινκ γκίνης Damit wir das auch in einem System ohne UTF-8 durchspielen können, nehme ich folgendes Beispiel: Es geht im Beispiel nur um "gk" nach der obigen Regel, am Anfang zu g, im Wort zu ng. Außerdem gilt die Annahme, dass es nur Kleinbuchstaben gibt. INPUT="gkroup tagko parkigk gkinis" OUTPUT="group tango parking ginis" INPUT="gkroup tagko parkigk gkinis" echo "$INPUT" | sed 's/\(^\|[[:space:]]\)γκ/\1g/g;
s/\([^[:space:]]\)γκ/\1ng/g' gkroup tagko parkigk gkinis
BTW: generell ist Transliteration per script extrem schwierig.
Voll deiner Meinung und ich mag das gar nicht. Leider kommt mein DVD-MP3-Player mit UTF-8 nicht klar, aber wenigstens wird ID3 v2.4 akzeptiert. Es war gar nicht so leicht einen konsolentauglichen ID3-Tag-Editor zu finden. Ich verwende eyeD3 Ich mache da schion einige Klimmzüge um von der CDDB etwas brauchbares zu erzeugen. In der Regel sind die Einträge dort ISO_8859-7 und vom Format chaotisch, abcde macht das aber meist brauchbar. Das Problem bei Mehrfachauswahl ist nun auch gelöst, man muss die Anzeige mit "q" beenden, etwas merkwürdig, da man sonst sofort die Auswahl eingeben kann. Die Schritte sind also grob: 1. iconv -f ISO_8859-7 -t UTF-8 2. export LC_CTYPE=el_GR.iso88597 tr '[:upper:]' '[:lower:]' | iconv -f ISO_8859-7 -t UTF-8` 3. Rauswerfen eventuell störender Zeichen: zB -e "s/[\:=,;*!&?'<>+()°|]//g" -e 's/"//g' und andere 4. Erzeugen eines ISO Level 3-Dateinamens und hier sind wir beim Problem dieses Threads. Bis jetzt habe ich: sed -e 's/μπ/b/g' -e 's/ντ/d/g' -e 's/αι/e/g' -e 's/άι/e/g' -e 's/αί/e/g' -e 's/ει/i/g' -e 's/έι/i/g' -e 's/εί/i/g' -e 's/οι/i/g' -e 's/όι/i/g' -e 's/ου/ou/g' -e 's/ού/ou/g' -e 's/αυ/av/g' -e 's/ευ/ev/g' -e 's/ηυ/iv/g' -e 's/γγ/ng/g' -e 's/γκ/g/g' -e 's/γι/j/g' -e 's/[αά]/a/g' -e 's/χ/ch/g' -e 's/δ/d/g' -e 's/[εέ]/e/g' -e 's/φ/f/g' -e 's/γ/g/g' -e 's/[ιίηή]/i/g' -e 's/κ/k/g' -e 's/λ/l/g' -e 's/μ/m/g' -e 's/ν/n/g' -e 's/[οόωώ]/o/g' -e 's/π/p/g' -e 's/ψ/ps/g' -e 's/ρ/r/g' -e 's/[ςσ]/s/g' -e 's/τ/t/g' -e 's/θ/th/g' -e 's/[υύ]/y/g' -e 's/β/v/g' -e 's/ξ/x/g' -e 's/ζ/z/g' -e 's/’//g' -e 's/\.//g' (BTW warum umbricht das KMail nicht, sind ja genug Leerzeichen vorhanden) Die Performance für diese Ersetzung ist leicht ausreichend. Es sind ja meist nur ein paar Worte. Da ist "gk" noch falsch darinnen, weil nur 50% richtig", aber zum Testen reicht es und ich ärgere mich weil die Dateilänge unter 10.2 bei ISO-Level 3 nicht gekürzt wird. Das liegt vermutlich an einem neueren mkisofs. Vermutlich kommt dazu demnächst ein Thread.
Wie willst du ein gamma transliterieren? Bei der Tabelle zu meinem Atlas finde ich:
nach WIkipedia und eigenem Gefühl (zB gi -> j) ;-) Für den MP3-Player im Auto ist das auch nicht so kritisch. Mir gefallen alle Lösungen nicht, die ich im Web gefunden habe, zB http://de.wikipedia.org/wiki/Wikipedia:Namenskonventionen/Neugriechisch#Tran... http://www.spinellis.gr/sw/greek/grconv/ (mit grenglish kann ich mich gar nicht anfreunden) Mir ist klar, da kann nichts perfektes rauskommen, aber es ist im Gegensatz zu nicht darstellbaren Zeichen lesbar und verständlich. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Fre, 23 Feb 2007, Al Bogner schrieb:
Am Freitag, 23. Februar 2007 01:41 schrieb David Haller:
Am Don, 22 Feb 2007, Al Bogner schrieb: [..] Voraus: Bei mir klappt das mit UTF-8 nicht so recht, ersetze die γκ also sinngem�?ß durch das richtige Zeichen. Wobei ich mir nicht sicher bin, wie sed mit UTF-8 umgeht. Ggfs. kann man mit den hexcodes arbeiten.
Ich denke sed und utf-8 passt bei griechischen Zeichen mit 10.2 schon.
Ich verwende jetzt die 10.2 und ja, da geht's prinzipiell.
Vermutlich mache ich eine Kleinigkeit falsch, es passiert nicht das Gew�?nschte. Sollte man nicht sed -e nehmen? Aber auch damit klappt es nicht.
Bei nur einem Ausdruck ist das egal.
Ich bringe ein anderes Beispiel, weil vielleicht nicht klar r�?ber kam, was ich will.
zB in UTF-8: γκρουπ ταγκό πάρκι�?κ γκί�?ης
Funktioniert hier: $ echo 'γκρουπ ταγκό πάρκι�?κ γκί�?ης' | sed 's/\(^\|[[:space:]]\)γκ/\1g/g;
s/\([^[:space:]]\)γκ/\1ng/g'
gρουπ ταngό πάρκι�?κ gί�?ης ^ ^^ ^ Evtl. hast du (oder dein Editor) was beim C&P oder beim einsetzen der gr. Zeichen was flscha gemacht...
Damit wir das auch in einem System ohne UTF-8 durchspielen können, nehme ich folgendes Beispiel: Es geht im Beispiel nur um "gk" nach der obigen Regel, am Anfang zu g, im Wort zu ng. Außerdem gilt die Annahme, dass es nur Kleinbuchstaben gibt.
INPUT="gkroup tagko parkigk gkinis" OUTPUT="group tango parking ginis"
INPUT="gkroup tagko parkigk gkinis" echo "$INPUT" | sed 's/\(^\|[[:space:]]\)γκ/\1g/g; ^^^^ Das kann so nicht klappen, denn das taucht in der Eingabe ja nicht auf.
BTW: generell ist Transliteration per script extrem schwierig. [..] Die Schritte sind also grob:
1. iconv -f ISO_8859-7 -t UTF-8
2. export LC_CTYPE=el_GR.iso88597 tr '[:upper:]' '[:lower:]' | iconv -f ISO_8859-7 -t UTF-8`
3. Rauswerfen eventuell störender Zeichen: zB -e "s/[\:=,;*!&?'<>+()°|]//g" -e 's/"//g' und andere
4. Erzeugen eines ISO Level 3-Dateinamens und hier sind wir beim Problem dieses Threads. Bis jetzt habe ich:
sed -e 's/�?π/b/g' -e 's/�?τ/d/g' -e 's/αι/e/g' -e 's/άι/e/g' -e 's/αί/e/g' -e 's/ει/i/g' -e 's/έι/i/g' -e 's/εί/i/g' -e 's/οι/i/g' -e 's/όι/i/g' -e 's/ου/ou/g' -e 's/ού/ou/g' -e 's/αυ/av/g' -e 's/ευ/ev/g' -e 's/ηυ/iv/g' -e 's/γγ/ng/g' -e 's/γκ/g/g' -e 's/γι/j/g' -e 's/[αά]/a/g' -e 's/χ/ch/g' -e 's/�?/d/g' -e 's/[εέ]/e/g' -e 's/φ/f/g' -e 's/γ/g/g' -e 's/[ιίηή]/i/g' -e 's/κ/k/g' -e 's/λ/l/g' -e 's/�?/m/g' -e 's/�?/n/g' -e 's/[οόωώ]/o/g' -e 's/π/p/g' -e 's/ψ/ps/g' -e 's/ρ/r/g' -e 's/[ςσ]/s/g' -e 's/τ/t/g' -e 's/�?/th/g' -e 's/[υύ]/y/g' -e 's/β/v/g' -e 's/�?/x/g' -e 's/ζ/z/g' -e 's/’//g' -e 's/\.//g' (BTW warum umbricht das KMail nicht, sind ja genug Leerzeichen vorhanden)
Einmal 'M-q' im xemacs ;) Das sieht gut aus. Erg�?nze am Anfang noch: -e 's/\(^\|[[:space:]]\)γκ/\1g/g' -e 's/\([^[:space:]]\)γκ/\1ng/g' Noch einfacher ist, du schreibst alles in ein sed-script (nicht shell-script!). Ich h�?nge es mal an. Die sed-Befehle können auch mehrere auf einer Zeile sein, dann mußt du sie eben durch ';' trennen. HTH, -dnh -- If Windows is the solution, can we please have the problem back?
Am Freitag, 23. Februar 2007 22:29 schrieb David Haller: Hallo David,
Am Fre, 23 Feb 2007, Al Bogner schrieb:
Am Freitag, 23. Februar 2007 01:41 schrieb David Haller:
Am Don, 22 Feb 2007, Al Bogner schrieb:
Ich denke sed und utf-8 passt bei griechischen Zeichen mit 10.2 schon.
Ich verwende jetzt die 10.2 und ja, da geht's prinzipiell.
Vielen Dank, dass du 10.2 gestartet hast. BTW irgendwann passen die Zeichen im Mail nicht, aber das ist kein Problem.
-e 's/\(^\|[[:space:]]\)γκ/\1g/g' -e 's/\([^[:space:]]\)γκ/\1ng/g'
Da es in der Zwischenzeit Änderungen gab und wohl nicht die letzten, hier der augenblickliche Stand. In der Regel sind es Akzente und Dinge die mir beim Überfliegen des Ergebnisses auffallen. sed -e 's/\(^\| [[:space:]]\)γκ/\1g/g' -e 's/\([^[:space:]]\)γκ/\1ng/g' -e 's/μπ/b/g' -e 's/ντ/d/g' -e 's/αι/e/g' -e 's/άι/e/g' -e 's/αί/e/g' -e 's/ει/i/g' -e 's/έι/i/g' -e 's/εί/i/g' -e 's/οι/i/g' -e 's/όι/i/g' -e 's/οί/i/g' -e 's/ου/ou/g' -e 's/ού/ou/g' -e 's/αυ/av/g' -e 's/ευ/ev/g' -e 's/ηυ/iv/g' -e 's/γγ/ng/g' -e 's/γκ/g/g' -e 's/γι/j/g' -e 's/[αά]/a/g' -e 's/χ/ch/g' -e 's/δ/d/g' -e 's/[εέ]/e/g' -e 's/φ/f/g' -e 's/γ/g/g' -e 's/[ιίϊηή]/i/g' -e 's/κ/k/g' -e 's/λ/l/g' -e 's/μ/m/g' -e 's/ν/n/g' -e 's/[οόωώ]/o/g' -e 's/π/p/g' -e 's/ψ/ps/g' -e 's/ρ/r/g' -e 's/[ςσ]/s/g' -e 's/τ/t/g' -e 's/θ/th/g' -e 's/[υύ]/y/g' -e 's/β/v/g' -e 's/ξ/x/g' -e 's/ζ/z/g' -e 's/’//g' -e 's/\.//g'`
Noch einfacher ist, du schreibst alles in ein sed-script (nicht shell-script!).
Danke für den Hinweis, aber bei kleinen Scripts will ich alles in 1 Datei haben. Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (2)
-
Al Bogner
-
David Haller