JürgenSchilling

  EDV-Service | Fotografie | Fotoarbeiten   

 


 Home

 Black&White
 Fotogramme
 Infrarot
 Kategorien
 Lightbox
 Lochkamera
 Portrait
 

Advanced ___________

 Service:
 EDV-Manuals

 Belichtungszeitentabelle
 Schrauben u. Gewinde
 

 Einführung in die:
 Beurteilung v. Negativen
 Farbmischung
 Filmentwicklung
 Infrarotfotografie
 Blitzlichtfotographie
 
 Entwicklungszeiten:
 Agfa Rodinal
 Kodak D76

 Tiefenschärferechner:
 Komplex  Einfach


 Fotolabor


 Kontakt / Impressum

 
______

 Zähler:
 Bilder pro Gast
 Zugriffszähler

 myPHPadmin
 
B4YCounter

 Login  Logout
 
Files

 Alle Bilder als Link

Mit "grep" und "find" nach Textmustern in Dateien suchen
 


Grep wird in erster Linie dann eingesetzt, wenn Dateien durchsucht werden müssen, zum Beispiel die Quelldateien eines Computerprogramms oder Logdateien.
Grep arbeitet bei der Suche wesentlich effizienter als das in einem Editor geschehen würde. Per Voreinstellung schreibt das Kommando alle Zeilen der Eingabe, die das gesuchte Muster enthalten, auf die Standardausgabe.



In Zusammenarbeit mit "find" kann ein ganzer Dateibaum nach einem Textmuster durchsuchen:

$ find /home/user -exec grep -H "Passwort" {} \;

Dieses Kommando durchsucht alle Dateien des Homelaufwerkes des Benutzers "user" nach der Zeichenkette "Passwort" und zeigt die gefundenen Zeilen zusammen
mit dem Dateinamen an, wobei die Anzeige des Dateinamens durch die Option -H ausgelöst wird.


In welchen Zeilen einer Datei kommen bestimmte Wörter vor?

Beispiel:
In welchen Zeilen der Datei passwd der String "home" vorkommt:

simon@etch:/etc$ grep home passwd
simon:x:1000:1000:Simon Bienlein,,,:/home/simon:/bin/bash
ftp:x:105:65534::/home/ftp:/bin/false


In welcher Datei kommt ein bestimmtes Texmuster vor?
Nun soll der Text “Italien” unabhängig von dessen Groß- und Kleinschreibung im aktuellen Laufwerk gesucht, und eine Liste der gefundenen Dateien ausgegeben werden:

simon@etch:~$ grep -li "Italien" *
blindtext.txt
cookie.php


Gesucht wird (wort1 ODER wort2):

grep -i -l -E "(wort1|wort2)" *.doc


Recursive im ganzen Verzeichnisbaum suchen:

grep -li --recursive "Fileserver" /

-l    gibt die gefundenen Dateien aus
-L   gibt die Dateien aus die das Muster nicht enthalten


Beschreibung von Textmustern mit "und" und "oder":

Suchen mit der "und" Vorgabe:
Beispiel: (wort1 UND wort2) werden in allen .doc Dateien gesucht.

grep -E 'wort1.*wort2|wort2.*wort1' *.doc 


Suchen mit der "oder" Vorgabe:
 

Beispiel: (wort1 ODER wort2) werden in allen *.doc Dateien gesucht.
grep -E 'wort1|wort2' *.doc


Anwendung des Kommandos zur Zeilenumbruchentfernung

Das in "datei.txt" zu Suchende Beispielmuster sei "(wort1 UND wort2)"

Versagt aufgrund eines Zeilenumbruchs die Suche mit diesem Befehl:
grep -E 'wort1.*wort2|wort2.*wort1' datei.txt

könnte dieser Suchbefehl zu Ergebnissen führen:
cat datei.txt | tr -d \\012 | grep -E 'wort1.*wort2|wort2.*wort1'

"cat" gibt den Inhalt einer Datei zeilenweise auf der Konsole aus, das ist bei großen Dateien unbefriedigend.
Daher gibt es "more" und "less".  "more" und "less" zeigen Dateiinhalte seitenweise an - eine sinnvolle Ergänzung zu 'cat'.
Funktion:

cat dateiname             zeigt die Datei an
cat dateiname | more   zeigt die Datei seitenweise an und erlaubt Blättern vorwärts mit den Tasten Return und Space, beenden mit 'q'
less dateiname           zeigt zeigt die Datei seitenweise an und erlaubt Blättern in beide Richtungen mit BILD, beenden mit 'q'


Alle Dateien in einem Verzeichnisbaum durchsuchen:

Da häufig alle Dateien des Verzeichnisses durchsucht werden sollen bietet sich für das Beispielmuster (wort1 UND wort2) folgendes an:

u = dateiname.dateityp
for u in 'ls';
do
echo $u:;
cat $u | grep - E 'wort1.*wort2|wort2.*wort1';
done | tee ergebnis.txt

Ziel ist die gleichzeitige Ausgabe auf dem Bildschirm und das Speichern des Ergebnisses in einer Datei. Deshalb wird das Kommando tee verwendet.

Beispiel1:
Das Verzeichnis nur nach dem Dateien durchsuchen, in deren Inhalt das Wort "Anleitungen" vorkommt:

for u in '/www/www.sr71.de/*.php'; do echo $u:; cat $u | grep 'Anleitungen'; done | tee ergebnis.txt

Beispiel2:
Das Verzeichnis nur nach Dateien durchsuchen, in deren Inhalt die Wörter "Anleitungen" UND "font" vorkommen:

for u in '/www/www.sr71.de/*.php'; do echo $u:; cat $u | grep -E 'Anleitungen.*font | font.*Anleitungen'; done | tee ergebnis.txt




 

Weitere Beispiele:

Suche nach textmuster in datei:
grep 'textmuster' datei

Suche nach textmuster in datei1 und datei2
grep 'textmuster' datei1 datei2

Ausgabe des Ergebnisses aber in Datei ergebnisdatei.txt, nicht auf Standardausgabe:
grep 'testmuster' datei1 datei2 > ergebnisdatei.txt

Suche nach testmuster in allen Dateien des aktuellen Verzeichnisses:
grep 'testmuster' *

Suche in datei nach verbreiteten Schreibweisen von Maier - es werden aber auch Zeichenketten als gültig erkannt, die Meierei oder RMeyer lauten:
grep 'M[ae][iy]er' datei

Sucht nach Zeichenketten, die "ier" enthalten, also z.B. hier, Bier, aber auch Stiere
grep '.ier' datei

Suche nach Zeilen in datei, die mit s oder S beginnen
grep -i '^s' datei
grep '^[sS]' datei

Suche nach Zeichenketten, die a, a1, a11, a11...1 lauten
grep 'a1*' datei

Sucht in datei nach Zeilen, die nur Exakte Zeichenfolge einer Zeile enthalten:
grep '^Exakte Zeichenfolge einer Zeile$' datei
grep -x 'Exakte Zeichenfolge einer Zeile' datei

Suche nach Zeilen in datei, die nur Ziffern enthalten oder leer sind:
grep '^[0-9][0-9]*$' datei

Suche in datei nach Zeichenketten, die mit a anfangen, danach mindestens ein b oder c haben und mit "d" aufhören:
grep 'a[bc]+d' datei

Sucht in datei nach E.T.
grep 'E\.T\.' datei
.
Suche in zwei Dateien nach zwei Suchmustern:
grep -E -n 'Medieninformatik|Informatik' datei1 datei2

Sucht im aktuellen Verzeichnis (in der Auflistung) nach Dateien, Ordnern, Links, die alle Benutzer lesen können
ls -l | grep '^.r..r..r..'

Sucht im aktuellen Verzeichnis (in der Auflistung) nach C-Programmen und txt-Dateien:
ls- l | grep '\.c|.txt$'

Suche im aktuellen Verzeichnis nach Unterverzeichnissen:
ls -l | grep '^d'

 

 

 

(c) Juergen Schilling 12.07.2009