Home / LinuxUser / 2001 / 06 / The Answer Girl

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)
Mandriva in Nöten
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Bitte übersetzen Sie!

The Answer Girl

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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 69 Punkte (1 Stimme)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 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 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...