Globenaut

Jeder hat das Recht auf Meinungsfreiheit und freie Meinungsäußerung; dieses Recht schließt die Freiheit ein, Meinungen ungehindert anzuhängen sowie über Medien jeder Art und ohne Rücksicht auf Grenzen Informationen und Gedankengut zu suchen, zu empfangen und zu verbreiten.
Die Allgemeine Erklärung der Menschenrechte
Resolution 217 A (III) vom 10.12.1948/Artikel 19
Zensoren sind Verbrecher!
BPjM: Trusted Censorship
Christliche Werte — Neine Danke!

Skripttipp #2: Mehrere Dateien unterschiedlichen Typs (text, .gz) durchsuchen

von Globenaut am 15.4.08

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: , , , , ,

#
Kommentare:
Kommentar veröffentlichen

Neuester Eintrag
Piratenblogger
Glauben ist die mutwillige Nichtbenutzung des Verstandes!
Bundestagswahl 2009: Weg mit dem Gesindel von SPD und C*U!
© 2005-2009, GlobenautDieses Blog wird unterstützt von Blogger.