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 

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • The Answer Girl
    Dass der Computeralltag auch unter Linux des Öfteren für Überraschungen gut ist, ist eher eine Binsenweisheit: Immer wieder funktionieren Dinge nicht oder nicht so, wie eigentlich angenommen. Das Answer-Girl im LinuxUser zeigt, wie man mit solchen Problemchen elegant fertig wird.
  • The Answer Girl
    Dass der Computeralltag auch unter Linux des Öfteren für Überraschungen gut ist, ist eher eine Binsenweisheit: Immer wieder funktionieren Dinge nicht oder nicht so, wie eigentlich angenommen. Das Answer-Girl im LinuxUser zeigt, wie man mit solchen Problemchen elegant fertig wird.
  • The Answer Girl
    Wer hat sie nicht schon mehr als genug gehört, die gutgemeinte Litanei vom Anlegen eines Backups. In der Firma oder an der Uni mag man dieses leidige Thema mit einiger Berechtigung auf die dortigen Systemadministrator(inn)en abwälzen, doch was ist mit dem Datenbestand zu Hause?
  • The Answer Girl
    Dass der Computeralltag auch unter Linux des Öfteren für Überraschungen gut ist, ist eher eine Binsenweisheit: Immer wieder funktionieren Dinge nicht oder nicht so, wie eigentlich angenommen. Das Answer-Girl im LinuxUser zeigt, wie man mit solchen Problemchen elegant fertig wird.
  • Remote-Backups mit rsync und rdist
    Wenn klassische Datensicherungsmedien nicht in Frage kommen, jedoch genügend Plattenplatz, ein lokales Netzwerk oder eine gute (und billige) Internetanbindung zur Verfügung stehen, bietet sich ein alternatives Datensicherungsszenario an: das Spiegeln sicherungswürdiger Dateien.
Kommentare

Infos zur Publikation

LU 12/2014: ANONYM & SICHER

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 4 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...
Brother Drucker MFC-7420
helmut berger, 11.11.2014 12:40, 1 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu 14.04-Nutzer...
Treiber für Drucker brother MFC-7420
helmut berger, 10.11.2014 16:05, 2 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu12.14-Nutzer u...
Can't find X includes.
Roland Welcker, 05.11.2014 14:39, 1 Antworten
Diese Meldung erhalte ich beim Versuch, kdar zu installieren. OpenSuse 12.3. Gruß an alle Linuxf...
DVDs über einen geeigneten DLNA-Server schauen
GoaSkin , 03.11.2014 17:19, 0 Antworten
Mein DVD-Player wird fast nie genutzt. Darum möchte ich ihn eigentlich gerne abbauen. Dennoch wür...