Um den Dateiinhalt zu durchsuchen ist grep das richtige Werkzeug, sofern es sich um Textdateien handelt. Sind die Dateien komprimiert (.gz) nimmt man zgrep (wobei zgrep die dekomprimierten Daten wiederum an grep weiterreicht). Was aber wenn in einem Verzeichnis eine bunte Mischung vorliegt und alle Dateien im Verzeichnis durchsucht werden sollen?
Eine kleine Funktion in der .bashrc erledigt genau diese Arbeit in einem Durchgang. Einfach mit einem beliebigen Texteditor die Datei .bashrc öffnen und folgende Funktion einfügen:
function durchsuche () { for Datei in ${2:-./*} do if [ ${Datei##*.} = 'gz' ]; then Greptyp='zgrep'; else Greptyp='grep'; fi echo -e "\e[1;33m$Datei:\e[0m" $Greptyp -aEin --color "$1" $Datei done }
Die Datei sichern und auf der Kommanodzeile neu einlesen („sourcen“):
#:~>. .bashrc
Jetzt ruft man auf der Kommandozeile einfach durchsuche gefolgt von einem regulären Ausdruck und ggf. einem Dateipfad auf. Wird kein Pfad angegeben, werden die Dateien des aktuellen Verzeichnisses (also ./*) durchsucht. Lautet die Dateiendung .gz wird zgrep benutzt, andernfalls grep. Um den Überblick zu bewahren wird beim Beginn der Suche in einer jeden Datei deren Name in gelber Schrift ausgegeben. Dies erleichert auf der Konsole die Orientierung enorm. Zusätzlich sind die grep-Parameter so gewählt, daß jede Fundstelle die Zeillennummer in der jeweiligen Datei enthält, Groß- und Kleinschreibung bei der Suche ignoriert und die Fundstelle innerhalb einer Zeile farbig hervorgehoben wird. Die Funktion arbeitet nicht rekursiv, d.h. sie steigt nicht in möglicherweise vorhandene Unterverzeichnisse ab.
#:~>durchsuche a.*[0-9] #:~>durchsuche a.*[0-9] ~/Downloads/*
Natürlich kann man auch ein separates Skript anlegen:
#!/usr/bin/env bash # Skript durchsuche # Beschreibung Durchsucht die Dateien in einem Verzeichnis mittels grep oder zgrep # Parameter $1: Regulärer Ausdruck # $2: Verzeichnis in dem gesucht werden soll; optional. for Datei in ${2:-./*} do if [ ${Datei##*.} = 'gz' ]; then Greptyp='zgrep'; else Greptyp='grep'; fi echo -e "\e[1;33m$Datei:\e[0m" $Greptyp -aEin --color "$1" $Datei done
Labels: .bashrc, Bash, grep, IT, Skripttipp, Terminal
Kommentare: