Home / LinuxUser / 2001 / 06 / The Answer Girl

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

„Klickbunt auf dem Server? Warum nicht, wenn's hilft!"
(220 Punkte bei 8 Stimmen)
KDE 4.10.2, Gnome 3.6 und mehr
(121 Punkte bei 4 Stimmen)
Google schmeißt Jabber raus ...
(121 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Bitte übersetzen Sie!

The Answer Girl

Gleichmacherei

eng2ger.vok trennt die deutschen Vokabeln durch zwei Bindestriche und jeweils ein Leerzeichen davor und danach von ihren englischen Übersetzungen:

erst gestern – only yesterday

Da diese Datei bei Weitem die größte ist, bietet es sich an, ihre Konvention auf die anderen Files zu übertragen.

Bei EXERCISE.VOK ist das nicht so schwer: Diese Datei belässt es bei einem Strich (-) zwischen den Leerzeichen, den wir mit sed schnell ersetzen:

[trish@lillegroenn eng_deu]$ sed -e "s/ - / – /" EXERCISE.VOK > EXERCISE.VOK_ 

Der sed-Befehl s substituiert schlicht und einfach das erste Vorkommnis von LeerzeichenMinusLeerzeichen in jeder Zeile mit LeerzeichenMinusMinusLeerzeichen. Das Ergebnis dieses Befehls, angewendet auf EXERCISE.VOK, erhalten wir eigentlich auf der Standardausgabe. Doch da wir es lieber in einer Datei sehen, leite wir mit > die Ausgabe in die Datei EXERCISE.VOK_ um. Nachdem wir uns vergewissert haben, dass die neue Datei vernünftig aussieht, reicht ein

[trish@lillegroenn eng_deu]$ mv EXERCISE.VOK_ EXERCISE.VOK

um die alte mit der neuen Datei zu überschreiben.

Die Datei BOOK.VOK stellt schon höhere Ansprüche: Hier dient ein einfaches Leerzeichen als Trennzeichen:

yesterday gestern

Damit es keine Verwechslungen mit Wortzwischenräumen in Wendungen gibt, sind diese durch einen Unterstrich gekennzeichnet, der als Wortbestandteil glücklicherweise nicht vorkommt:

yearn sich_sehnen

Hier müssen wir also zweimal ersetzen: das jeweils erste Leerzeichen durch LeerzeichenMinusLeerzeichen (s/ / -- /) und global jegliches Vorkommen von _ durch Leerzeichen (s/_/ /g). Kombiniert sieht das so aus:

[trish@lillegroenn eng_deu]$ sed -e "s/ / – /" -e "s/_/ /g" BOOK.VOK > BOOK.VOK_

Prüfen und Vergleichen

Bevor wir BOOK.VOK mit BOOK.VOK_ überschreiben, möchten wir die neue Datei prüfen, also mit dem Original vergleichen. Doch diff eignet sich hierfür nicht, da es alle Zeilen ausgibt, die verschieden sind, und das sind nunmal alle… Was wir brauchen, ist ein wortbasiertes diff: wdiff. Wenn's die Distribution nicht mitliefert, ist es z. B. unter http://rpmfind.net/linux/rpm2html/search.php?query=wdiff oder http://packages.debian.org/stable/text/wdiff.html erhältlich.

[trish@lillegroenn eng_deu]$ wdiff --help
 Usage: wdiff [OPTION]… FILE1 FILE2[…]
   -3, --no-common      inhibit output of common words

Mit der Option -3 lässt sich also vermeiden, dass wdiff Wörter ausgibt, die gleich geblieben sind. Wenn wir die ganze Ausgabe noch durch less schicken, verhindern wir auch, dass uns beim Durchschauen etwas durch die Lappen geht:

[trish@lillegroenn eng_deu]$ wdiff -3 BOOK.VOK BOOK.VOK_ | less[…]
 =========================================
  {+--+}
 =========================================
  [-du_kannst-] {+-- du kannst+}[…]

wdiffs Ausgabe ist zugegebenermaßen etwas gewöhnungsbedürftig: Die =-Zeile fungiert lediglich als Trennzeile. In [- -] stehen Strings aus BOOK.VOK, die in BOOK.VOK_ durch die Zeichenkette in der {+-Klammer ersetzt wurden. Das {+--+} bedeutet, dass in BOOK.VOK_ einfach zwei Minuszeichen hinzugekommen sind – Leerzeichen sind für das wortbasierte diff vernachlässigbar.

Besser lesbar wird die Ausgabe im sogenannten less-Modus, der mit less eigentlich nicht viel zu tun hat. Aber immerhin,

[trish@lillegroenn eng_deu]$ wdiff -3l BOOK.VOK BOOK.VOK_ | less[…]
 =========================================
  –
 =========================================
  du_kannst – du kannst[…]

verzichtet auf die ungewohnte Klammerung und macht die Ausgabe daher leichter lesbar.

Allerdings haben wir keine Lust, durch die gesamte less-Ausgabe zu gehen, und überlegen uns Folgendes: Wenn wir alles richtig gemacht haben, wirft wdiff -3 genausoviele ---Zeilen aus, wie BOOK.VOK (und BOOK.VOK_) Zeilen (lines – -l) hat:

[trish@lillegroenn eng_deu]$ wc -l BOOK.VOK BOOK.VOK_
   29018 BOOK.VOK
   29018 BOOK.VOK_
   58036 total

Wenn wir aus der wdiff-Ausgabe alle störenden Trennzeilen heraus filtern, sollten wir eigentlich ebenfalls auf 29018 Zeilen kommen (grep -v sucht all die Zeilen heraus, die kein == enthalten):

[trish@lillegroenn eng_deu]$ wdiff -3l BOOK.VOK BOOK.VOK_ |grep -v "=="| wc -l
   29023

So ganz wie geplant lief das also nicht – wo kommen die fünf Zeilen zuviel her? Clever, wie wir sind, lassen wir uns einfach all die Zeilen anzeigen, die kein Doppelminus enthalten:

[trish@lillegroenn eng_deu]$ wdiff -3l BOOK.VOK BOOK.VOK_ | grep -v "==" | grep -v "--"| wc -l
 Usage: grep [OPTION]… PATTERN [FILE]…
 Try `grep --help' for more information.
       0

Doch da haben wir wohl was falsch gemacht… Natürlich: Minus-Zeichen dienen ja als Kennzeichen für die Shell, dass dahinter eine Option kommt, und die Stärke der doppelten Anführungszeichen reicht nicht aus, um unser Minus-Suchmuster vor der Shell zu verbergen.

Zum Glück erinnern wir uns an den alten Bash-Trick, einem Befehl mit einem -- zu sagen, dass dahinter keine weiteren Optionen kommen:

[trish@lillegroenn eng_deu]$ man bash[…]
 OPTIONS[…]
    -  A single - signals the end of options and disables fur­
       ther  option processing.  Any arguments after the - are
       treated as filenames and arguments.  An argument of  –
       is equivalent to an argument of -.[…]

Mit einem

[trish@lillegroenn eng_deu]$ wdiff -3l BOOK.VOK BOOK.VOK_ | grep -v "==" | grep -v – "--"| wc -l
       5

kommen wir also tatsächlich auf die vermissten fünf Zeilen. Doch wo kommen die her?

[trish@lillegroenn eng_deu]$ wdiff -3l BOOK.VOK BOOK.VOK_ | grep -v "==" | grep -v – "--"
 arrow_keys
 sensing_mark

Drei Leerzeilen, die wdiff irgendwie eingebaut hat, aber was ist mit arrow_keys und sensing_mark? Derselbe Befehl ohne die l-Option für wdiff gibt Auskunft, und

[trish@lillegroenn eng_deu]$ wdiff -3l BOOK.VOK BOOK.VOK_ | less

lässt uns mit dem less-Befehl /arrow_keys nach der entsprechenden Stelle im Vergleich fahnden. Siehe da:

 [-arrow_keys-]
 {+arrow keys --+}

Schuld (auch an den Leerzeilen) trägt eindeutig wdiff.

Bei all dem Hin und Her hätten wir beinahe vergessen, warum wir wdiff überhaupt rausgekramt haben: Wir wollten prüfen, ob in den Zeilen, in denen wir Unterstriche ersetzt haben, alles glatt gegangen ist. Da nehmen wir lieber wdiff ohne die l-Option her, denn da können wir alle Zeilen ausschließen, in denen ein {+--+} vorkommt:

[trish@lillegroenn eng_deu]$ wdiff -3 BOOK.VOK BOOK.VOK_ | grep -v "==" | grep -v "{+--+}" | less

Alles in Ordnung? Dann überschreiben wir einfach das alte BOOK.VOK mit dem konvertierten Inhalt aus BOOK.VOK_:

[trish@lillegroenn eng_deu]$ mv BOOK.VOK_ BOOK.VOK 
Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 130 Punkte (6 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2013_06

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Emacs als Psychologe
Emacs als Psychologe
Tim Schürmann, 21.05.2013 11:49, 0 Kommentare

Wer beim Schreiben in Emacs nicht mehr weiter weiß oder schier an einer Programmieraufgabe verzweifelt, der kann den eingebauten Psychologen um Rat fragen.

1966 entwickelte der Infor...

Aktuelle Fragen

Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 3 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...
lvm wieder loswerden
Peter Dibbern, 11.04.2013 16:28, 4 Antworten
Ich habe sämtliche alten Kisten ausgeschlachtet und aus der Teilen einen Rechner zusammengeschrau...