Der Linux-Befehl `look` durchsucht eine Datei und listet Zeilen auf, die mit einem bestimmten Wort oder einer Phrase beginnen. Es ist jedoch wichtig zu wissen, dass sich das Verhalten auf verschiedenen Linux-Distributionen unterscheiden kann. Dieses Tutorial erklärt die Nutzung dieses Befehls.
Unterschiedliches Verhalten des `look`-Befehls unter Ubuntu
Bei der Recherche für diesen Artikel stieß ich auf unerwartete Schwierigkeiten mit dem Befehl `look`, obwohl er eigentlich einfach und nützlich sein sollte. Es gab zwei Hauptprobleme: die Kompatibilität und die Dokumentation.
Dieser Artikel wurde unter Ubuntu, Fedora und Manjaro getestet. `look` war in allen Distributionen vorhanden, was erfreulich war. Allerdings war das Verhalten nicht einheitlich. Die Version unter Ubuntu unterschied sich erheblich. Laut den Ubuntu-Manpages sollte das Verhalten jedoch identisch sein.
Nach einiger Recherche stellte sich heraus, dass `look` traditionell eine binäre Suche verwendet, während die Ubuntu-Version eine lineare Suche nutzt. Die Online-Manpages von Ubuntu für Bionic Beaver (18.04), Cosmic Cuttlefish (18.10) und Disco Dingo (19.04) geben fälschlicherweise an, dass die Ubuntu-Version eine binäre Suche verwendet.
Ein Blick in die lokale Ubuntu-Manpage zeigt deutlich, dass die dortige Version eine lineare Suche verwendet. Es gibt eine Befehlszeilenoption, um eine binäre Suche zu erzwingen. Keine der Versionen in den anderen Distributionen bietet eine solche Auswahlmöglichkeit.
man look
In der Manpage findet sich ein Abschnitt, der die lineare Suche dieser Version von `look` beschreibt.
Es ist ratsam, immer zuerst die lokalen Manpages zu konsultieren.
Lineare Suche vs. binäre Suche
Die binäre Suche ist schneller und effizienter als eine lineare Suche, besonders bei großen Dateien. Der Nachteil der binären Suche ist, dass die Datei sortiert sein muss. Wenn Sie Ihre Datei nicht direkt sortieren möchten, können Sie eine sortierte Kopie erstellen und diese mit `look` verwenden.
Wir werden dies im weiteren Verlauf des Artikels demonstrieren. Es ist wichtig zu wissen, dass Sie unter Fedora, Manjaro und den meisten anderen Linux-Distributionen eine sortierte Kopie benötigen.
Installation der Wortliste
`look` kann mit beliebigen Textdateien oder der lokalen Wörterbuchdatei „words“ arbeiten.
Auf Manjaro muss die Datei „words“ separat installiert werden. Verwenden Sie hierzu:
sudo pacman -Syu words
Verwendung von `look`
Für diesen Artikel verwenden wir einen Textauszug aus dem Gedicht „The Jumblies“ von Edward Lear.
Lassen Sie uns den Inhalt mit folgendem Befehl anzeigen:
less the-jumblies.txt
Hier ist der erste Teil des Gedichts. Wir verwenden Ubuntu, daher bleibt die Datei unsortiert. Unter Fedora und Manjaro würden wir mit einer sortierten Kopie arbeiten, wie wir später zeigen werden.
Um Zeilen zu finden, die mit „Sie“ beginnen, verwenden wir:
look They the-jumblies.txt
`look` listet die entsprechenden Zeilen auf:
Groß- und Kleinschreibung ignorieren
Um die Groß- und Kleinschreibung zu ignorieren, verwenden Sie die Option `-f`. Wir suchen wieder nach „sie“, diesmal jedoch in Kleinbuchstaben.
look -f they the-jumblies.txt
Diesmal enthält die Ausgabe eine zusätzliche Zeile.
Die Zeile mit „THEY“ wurde vorher nicht angezeigt, da sie nicht mit der Groß-/Kleinschreibung unseres Suchbegriffs „They“ übereinstimmte. Das Ignorieren der Groß- und Kleinschreibung führt dazu, dass sie in die Ergebnisse aufgenommen wird.
`look` mit sortierter Datei verwenden
Wenn Ihre Linux-Distribution eine Version von `look` verwendet, die sich wie eine traditionelle binäre Suche verhält, müssen Sie Ihre Datei sortieren oder mit einer sortierten Kopie arbeiten.
Wir wiederholen den Befehl zur Suche nach „Sie“, diesmal unter Manjaro.
Wie Sie sehen, wurden keine Ergebnisse zurückgegeben, obwohl wir wissen, dass das Gedicht Zeilen enthält, die mit „Sie“ beginnen.
Erstellen wir eine sortierte Kopie der Datei. Wenn Sie die Optionen `-f` (Groß-/Kleinschreibung ignorieren) oder `-d` (nur alphanumerische Zeichen und Leerzeichen) mit `look` verwenden, müssen Sie diese auch beim Sortieren der Datei verwenden.
Mit der Option `-o` (Ausgabe) können Sie den Namen der Datei angeben, in der die sortierten Zeilen gespeichert werden sollen. In diesem Beispiel ist es „sorted.txt“.
sort -f -d the-jumblies.txt -o sorted.txt
Lassen Sie uns die Datei „sorted.txt“ überprüfen und `look` mit den Optionen `-f` und `-d` verwenden.
Nun erhalten wir die erwarteten Ergebnisse.
Nur Leerzeichen und alphanumerische Zeichen berücksichtigen
Um `look` anzuweisen, alles zu ignorieren, was kein alphanumerisches Zeichen oder ein Leerzeichen ist, verwenden Sie die Option `-d` (alphanumerisch).
Mal sehen, ob es Wörter gibt, die mit „Oh“ beginnen.
look -f oh the-jumblies.txt
Es werden keine Ergebnisse zurückgegeben.
Versuchen wir es noch einmal und sagen `look`, dass alles außer alphanumerischen Zeichen und Leerzeichen ignoriert werden soll. Satzzeichen werden somit ignoriert.
look -f -d oh the-jumblies.txt
Diesmal erhalten wir ein Ergebnis. Die Zeile wurde zuvor nicht gefunden, da die Anführungszeichen und das Ausrufezeichen die Suche störten.
Festlegen des Abschlusszeichens
Sie können `look` anweisen, ein bestimmtes Zeichen als Abschlusszeichen zu verwenden. Standardmäßig werden Leerzeichen und Zeilenenden als Abschlusszeichen verwendet.
Mit der Option `-t` (Trennzeichen) können wir das gewünschte Zeichen festlegen. In diesem Beispiel verwenden wir das Apostrophzeichen. Wir müssen es mit einem Backslash maskieren, damit `look` es nicht als Teil einer Zeichenkette interpretiert.
Wir setzen den Suchbegriff auch in Anführungszeichen, da er ein Leerzeichen enthält. Wir suchen nach zwei Wörtern.
look -f -t \' "they call" the-jumblies.txt
Die Ergebnisse entsprechen dem Suchbegriff und enden mit dem Apostroph, das wir als Abschlusszeichen verwendet haben.
`look` ohne Datei verwenden
Wenn Sie in der Befehlszeile keinen Dateinamen angeben, verwendet `look` die Wortdatei.
Der Befehl:
liefert diese Ergebnisse:
Dies sind alle Wörter in der Datei, die mit dem Wort „Kreis“ beginnen.
Fazit
Das ist alles, was es über `look` zu wissen gibt.
Es ist ziemlich einfach, sobald man weiß, dass es Unterschiede zwischen den Linux-Distributionen gibt und ob die eigene Version eine binäre oder lineare Suche verwendet.