Textdateien nach doppelt oder mehrfachen Inhalt durchsuchen und zählen
Bei der Bearbeitung von Text oder Konfigurationsdateien in der Linux Shell, kann es oft die Anforderung geben, das identische Einträge in den Dateien nur einmal vorkommen, damit die Überprüfung insbesondere in Dateien mit einer grösseren Anzahl an Zeilen, diese nicht manuell erfolgen muss, hilft die Verwendung der Filter sort und uniq in der Linux bash.
Dieser Befehl zählt doppelte Zeilen und sortiert die Ausgabe in der bash.
$ sort FILE | uniq --count
Den Platzhalter FILE durch den wirklichen Dateinamen ersetzen.
Sollen nur doppelt vorhandene Zeilen ausgegeben werden.
$ sort FILE | uniq --count --repeated
Hierbei wird nichts ausgegeben, wenn keine doppelten Zeilen in der Datei enthalten sind.
Befehl in Bash History finden und erneut ausführen
Bourne-again shell ist eine freie Unix-Shell unter der GPL. Bash merkt sich die eingegebenen Befehle und speichert sie in einer Verlaufsdatei, um sie später wiederholt ausführen zu können. Es ist die Standard Shell für Terminalumgebungen bei den meisten Linux-Distributionen, unter macOS kann die Standard Shell auf Bash festgelegt werden, für Windows wird Bash mit der WSL Installation verfügbar.
Bash the Bourne-again shell on Debian
Die meisten werden es kennen, mit der Pfeiltaste nach Oben ↑ kann man durch den Bash-Verlauf scrollen, um ein zuvor ausgeführter Befehl wiederholt auszuführen.
Bash-History Rückwärtssuche
Was viele nicht wissen, es lässt sich nach einer bestimmten Befehlszeile in der history suchen, so kann mit Ctrl+R die Rückwärtssuche aufgerufen werden, hier gibt man die Zeichen ein an die man sich erinnert.
Durch erneutes Ctrl+R scrollt man schrittweise zurück, zu Befehlszeilen die dem Suchmuster in der History entsprechen.
Ctrl+R: Bash-Verlauf nach einem Befehl durchsuchen. Ruft den letzten Befehl auf, der den eingegebenen Zeichen entspricht.
Ctrl+O: Führt den gefundenen Befehl aus, nach Ctrl+R.
Ctrl+G: Verlässt den Verlaufssuchmodus wieder, ohne einen Befehl auszuführen.
Befehl in Bash-Verlauf druchsuchen
Ein häufiges Szenario in dem man sich wiederfindet, besteht darin, einen Teil eines Befehls einzugeben um dann festzustellen, dass man ihn zuvor ausgeführt hat und den Verlauf danach durchsuchen könnte.
Die korrekte Suchmethode mit dem was sich bereits in der Befehlszeile befindet, besteht darin, den Cursor mit Ctrl+A an den Anfang der Zeile zu bewegen, mit Ctrl+R die Rückwärtshistorie aufzurufen, und mit Ctrl+Y die aktuelle Zeile in die Suche einzufügen, und um dann erneut mit Ctrl+R rückwärts zu suchen.
Bash-Verlauf im Terminal anzeigen
Die Liste der Befehle im Bash-Verlauf beginnt mit einer Index Nummer.
$ history
Der Befehl mit der höchsten Nummer ist der letzte ausgeführte Befehl.
495 vi /etc/bash.bashrc
496 cd /var/www/3w/dot/html/content
497 uname -promsvm
498 vi /etc/sysctl.conf
499 multitail -cS postfix /var/log/mail.log
500 multitail -cS apache /var/log/apache2/access.log
501 multitail -cS syslog /var/log/syslog
502 history
Wir können die Ausgabe abschneiden, indem wir nach dem Befehl eine Zahl angeben. Wenn wir beispielsweise nur die letzten 5 eingegebenen Befehle sehen möchten, können wir Folgendes eingeben.
$ history 5
Weitere Möglichkeiten bieten sich beispielsweise an, mit weiterleiten an grep, um die Befehlsverlauf Ausgabe zu filtern.
$ history | grep hostname
365 hostname
369 hostnamectl status
484 hostnamectl set-hostname debian
486 cat /etc/hostname
516 history | grep hostname
Befehle aus der Bash-Historie ausführen
Wir können einen zuvor gemerkten Befehl wiederholt ausführen, indem wir die Nummer mit einem Ausrufezeichen (!) voranstellen. Wie beispielsweise in die Historie oben, können wir den Befehl hostnamectl status aus der history schnell aufrufen, indem man !369 eingibt.
Dadurch wird der mit der Verlaufsnummer 369 verknüpfte Befehl direkt aufgerufen und auch gleich ausgeführt.
Wir können auch Befehle relativ zu unserer aktuellen Position ausführen. Das wird ermöglicht indem wir die Syntax !-n verwenden, wobei n durch die Anzahl der Befehle ersetzt wird, die wir zurückgehen möchten.
Wenn wir beispielsweise einen Befehl abrufen und ausführen möchten, den wir vor unserem letzten eingegeben haben, können wir !-5 eingeben, die Session könnte so aussehen.
$ !-5
hostname
debian
Um den vorherigen Befehl erneut auszuführen, macht Bash eine Verknüpfung zum letzten Befehl. Mit der Abkürzung !! wird der neueste Befehl wiederholt ausgeführt.
Bash-Verlauf löschen
Den Verlauf der aktuellen Benutzersitzung bereinigen, beispielsweise nach einer Serie fehlerhaften Befehle, die man nicht weiterverwenden möchte.
$ history -c
Der gespeicherte Bash-Verlauf unter Linux komplett löschen.
$ cat /dev/null > ~/.bash_history
Der Befehl cat löscht den Inhalt der Datei .bash_history des aktuell angemeldeten Benutzers.
Fazit
Dies sollte jetzt eine gute Vorstellung davon geben, wie die zur Verfügung stehenden Verlaufsoperationen genutzt werden können. Einige davon werden wahrscheinlich nützlicher sein als andere, aber es ist gut zu wissen, dass Bash diese Fähigkeiten hat, falls man sich in einer Position befindet, in der es hilfreich wäre, sie auszugraben.
Nicht zuletzt sollte der Befehl history, die Rückwärtssuche und die einfachen History-Erweiterungen helfen, den Arbeitsablauf zu beschleunigen.
UNBLOG verwendet Cookies, um Dein Online-Erlebnis zu verbessern. Mit "ACCEPT" gibst Du Deine Zustimmung zur Nutzung dieser Website und unseren Datenschutzbestimmungen, oder wähle Cookie settings.
Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern, während Sie durch die Website navigieren. Von diesen werden die Cookies, die nach Bedarf kategorisiert werden, in Ihrem Browser gespeichert, da sie für das Funktionieren der grundlegenden Funktionen der Website wesentlich sind. Wir verwenden auch Cookies von Drittanbietern, mit denen wir analysieren und verstehen können, wie Sie diese Website nutzen. Diese Cookies werden nur mit Ihrer Zustimmung in Ihrem Browser gespeichert. Sie haben auch die Möglichkeit, diese Cookies zu deaktivieren. Das Deaktivieren einiger dieser Cookies kann sich jedoch auf Ihre Browser-Erfahrung auswirken.
Notwendige Cookies sind unbedingt erforderlich, damit die Website ordnungsgemäß funktioniert. Diese Kategorie enthält nur Cookies, die grundlegende Funktionen und Sicherheitsmerkmale der Website gewährleisten. Diese Cookies speichern keine persönlichen Informationen.
Alle Cookies, die für die Funktion der Website möglicherweise nicht besonders erforderlich sind und speziell zur Erfassung personenbezogener Daten des Benutzers über Analysen, Anzeigen und andere eingebettete Inhalte verwendet werden, werden als nicht erforderliche Cookies bezeichnet. Es ist obligatorisch, die Zustimmung des Benutzers einzuholen, bevor diese Cookies auf Ihrer Website ausgeführt werden.