Ohne Doppelgänger

Diese Ausgabe zeigt deutlich, dass wir mit dem Skript noch etwas vorhaben: Wir wollen die Dubletten loswerden. Eigentlich eine einfache Sache: die Ausgabe mit sort sortieren (dank -f – "fold" – mit gleicher Wertigkeit für Groß- und Kleinbuchstaben) und mit uniq die Doppelgänger rauswerfen:

        grep -hwi "$1" $WBDIR/* | sort -f | uniq

Leider stimmt damit irgendwas nicht, denn der Testlauf ergibt

[trish@lillegroenn /tmp]$ ./wb yesterday
 […]
 gestern – yesterday
 only yesterday – erst gestern
 vorgestern – the day before yesterday
 yesterday – gestern
 yesterday – gestern
 […]

zwar ein sortiertes, aber immer noch nicht dublettenfreies Bild. Die Untersuchung der mit ./wb yesterday > /tmp/test in die Datei /tmp/test umgeleitete Ausgabe mit einem Editor ergibt: Der einzige Unterschied zwischen den zwei "yesterday – gestern"-Zeilen sind Whitespace-Zeichen.

Na gut, dann vereinheitlichen wir all diese ('[:blank:]') zunächst zu Leerzeichen (' ') und vereinfachen alle Leerzeichenfolgen mit der tr-Option -s (squeeze") jeweils zu einem einzelnen:

        grep -hwi "$1" $WBDIR/* | tr -s '[:blank:]' ' ' | sort -f | uniq

Und doch – immer noch zeigt sich die Doppelzeile hartnäckig: Natürlich, denn jetzt haben wir in der einen Ausgabe kein und in der anderen genau ein Leerzeichen am Zeilenende, an dem sich uniq stört.

Also holen wir seufzend nochmal sed heraus und ersetzen ein einzelnes Leerzeichen am Zeilenende ($) durch nichts:

        grep -hwi "$1" $WBDIR/* | tr -s '[:blank:]' ' ' | sed -e "s/ $//" | sort -f | uniq

Et voilà – endlich ist das wb-Skript (Listing 1) funktionstüchtig. Jetzt dürfen die Debug-Optionen weg, und root kann es nach /usr/local/bin zur Nutzung für alle kopieren. Da dieses Verzeichnis meistens in der PATH-Variablen enthalten ist, reicht es jetzt auch, wb ohne Pfadangabe aufzurufen.

Listing 1

Das Wörterbuchskript

wb
 #!/bin/bash
 WBDIR=/home/trish/dict
 if [ $# -ne 1 ]; then
         echo "Usage: $0 \"string string …\""
         echo "       $0 string"
         echo "       $0 regexp"
 else
         grep -hwi "$1" $WBDIR/* | tr -s '[:blank:]' ' ' | sed -e "s/ $//" | sort -f | uniq
 fi

Mehrwert

Aufmerksame Leser/innen wundern sich möglicherweise, dass in Listing 1 aus einer vorgestellten plötzlich drei echo-Zeilen wurden. Wer ein wenig mit dem Skript (oder grep) experimentiert hat, weiß, dass man der Shell durch Einschließen mehrerer Strings in Anführungszeichen suggerieren kann, dass sie es trotz allem nur mit einem Argument zu tun hat.

Sobald Benutzer/innen nach einem Ausdruck suchen wollen, der aus mehreren Wörtern besteht, müssen sie den einfach in Gänsefüßchen setzen:

[trish@lillegroenn /tmp]$ wb "sich erinnern" 
 recollect – sich erinnern an
 remember – sich erinnern
 sich erinnern – remember[…]

Diese Benutzungsart sollten wir natürlich dokumentieren:

echo "Usage: $0 \"string string …\""

Damit echo die auszugebenden Hochkommata nicht fälschlicherweise für die Begrenzung des eigenen Arguments hält, müssen sie mit \ escapt (d. h., ihrer Sonderstellung in der Shell beraubt) werden.

Die letzte echo-Zeile

echo "       $0 regexp"

hingegen zielt darauf ab, dass grep von Haus aus nicht nur nach Zeichenketten, sondern auch nach regulären Ausdrücken ("regexps") sucht. Damit kann die Nutzerin zum Beispiel Schreibunsicherheiten elegant überspielen:

[trish@lillegroenn /tmp]$ wb "ye.*y" 
 erst gestern – only yesterday
 Freibauern – yeomanry
 gelbliche – yellowly
 gestern – yesterday
 hefig – yeasty[…]

sucht nach der Übersetzung von Wörtern, die mit ye beginnen und auf y enden. Der Punkt steht dabei für ein beliebiges Zeichen, und der nachgestellte * signalisiert, dass eine beliebige Anzahl (mindestens keins) davon auftauchen soll.

Zu beachten ist hier lediglich, dass auch bei regulären Ausdrücken der Satz gilt: "Manche sind gleicher als andere." Obwohl die Grundregeln gleich sind, sind z. B. nicht alle perl-Regexps auch mit grep zu gebrauchen. Ein Blick in die grep-Manpage ist daher oft von Vorteil …

Glossar

Leserechte

Damit der Inhalt einer Datei mit Hilfe eines Pagers wie less oder eines Editors den Augen eines Users zugänglich gemacht werden kann, muss sie aus Sicht dieses Benutzers das r- ("read"-) Flag tragen. Dies kann mit dem Kommando chmod für die Eigentümerin der Datei (chmod u+r dateiname), die Eigentümergruppe (g+r) und alle anderen (o+r) gesetzt werden. Bei Verzeichnissen lässt das Leserecht die Anzeige des Verzeichnisinhalts mit ls zu. Weitere Rechte sind das Schreib- (w) und das Ausführungsrecht (x). Sie können mit ls -l ("long listing") sichtbar gemacht werden.

Pipe

Die "Rohrleitung", auf der Kommandozeile | geschrieben, nimmt die Standardausgabe des links davon stehenden Kommandos und füttert damit das Kommando auf der rechten Seite.

Shell

Die Kommandozeilenschnittstelle zwischen der Benutzerin und ihren Eingabegeräten und dem Betriebssystem. Die meisten Unix-Shells haben eine mehr oder weniger mächtige Programmiersprache eingebaut.

$

Shells wie die Bourne-Shell (sh), Korn-Shell (ksh) oder die Bourne-Again-Shell (bash, unter Linux auch sh) geben den Inhalt einer Variablen preis, wenn man vor ihren Namen ein Dollarzeichen setzt.

Whitespace

Sammelbegriff für Zeichen, die dem Auge "Hier steht kein Zeichen" vorgaukeln. Darunter fallen z. B. Leer- und Tabulatorzeichen.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ä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/2016: Neue Desktops

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

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

Aktuelle Fragen

Drucker Epson XP-332 unter ubuntu 14.04 einrichten
Andrea Wagenblast, 30.11.2016 22:07, 2 Antworten
Hallo, habe vergeblich versucht mein Multifunktionsgerät Epson XP-332 als neuen Drucker unter...
Apricity Gnome unter Win 10 via VirtualBox
André Driesel, 30.11.2016 06:28, 2 Antworten
Halo Leute, ich versuche hier schon seit mehreren Tagen Apricity OS Gnome via VirtualBox zum l...
EYE of Gnome
FRank Schubert, 15.11.2016 20:06, 2 Antworten
Hallo, EOG öffnet Fotos nur in der Größenordnung 4000 × 3000 Pixel. Größere Fotos werden nic...
Kamera mit Notebook koppeln
Karl Spiegel, 12.11.2016 15:02, 2 Antworten
Hi, Fotografen ich werde eine SONY alpha 77ii bekommen, und möchte die LifeView-Möglichkeit nu...
Linux auf externe SSD installieren
Roland Seidl, 28.10.2016 20:44, 1 Antworten
Bin mit einem Mac unterwegs. Mac Mini 2012 i7. Würde gerne Linux parallel betreiben. Aber auf e...