UnixTools01 08: Difference between revisions

From
Jump to navigation Jump to search
Line 55: Line 55:


= grep =
= grep =

Sie haben eine wirklich lange Datei und Sie fragen sich, ob es irgendwo darin eine Zeile gibt, in der das Wort 'foobar' vorkommt? Dann hilft Ihnen das Programm '''grep'''. Wenn Sie das Kommando '''grep''' aufrufen, geben Sie zunächst das an, wonach Sie suchen (das Muster) und danach eine oder mehrere Dateien, die grep sich (in dieser Reihenfolge) ansehen soll.

$gruenau4 jpr 18 ( ~ ) $ grep 14 file.txt
Zeile 14


Findet '''grep''' eine Zeile, in der (vielleicht nehen anderen Dingen) das gesuchte Muster steht, so gibt es diese Zeile aus.
Sollte '''grep''' mehrere Dateien durchsuchen, so gibt '''grep''' zusätzlich den Namen der Datei aus, in der es die gesuchte Zeile gefunden hat.

gruenau4 jpr 19 ( ~ ) $ grep 14 file.txt anotherfile.txt
file.txt:Zeile 14

In Verbindung mit Wildcards ist dies sehr nützlich. Fragen Sie sich beispielsweise, in welcher *.txt -Datei wohl eine Zeile mit der Zeichenfolge '''14''' steht, dann spezifizieren Sie alle in Frage kommenden Dateien über eine Wildcard:

gruenau4 jpr 20 ( ~ ) $ grep 14 *.txt
file.txt:Zeile 14

Zur Erinnerung: Bevor die Shell das Kommando '''grep''' ausführt, ersetzt es die wildcard '*.txt' durch die Namen aller Dateien, die auf die Wildcard '''*.txt''' passen. In diesem Fall sind dies alle Dateien ihres aktuellen Working Directories, die auf '''.txt''' enden. Grep wird dann alle diese Dateien nach Zeilen durchsuchen, die '''14''' enthalten. Findet es welche, so gibt es den Namen der Datei, sowie die gesamte gefundene Zeile aus. Im obigen Beispiel gibt es also nur eine Datei, die das gesuchte Muster enthält

= tail =
= tail =
= head =
= head =

Revision as of 16:05, 27 November 2024

more basic tools

Hier einige weitere Kommandos, speziell für die Arbeit mit Dateien, die Sie oft benutzen werden

cat

$ cat file.txt
erste Zeile der Datei file.txt
zweite Zeile der Datei file.txt
...
letzte Zeile der Datei file.txt

Das Program cat gibt den Inhalt der Datei file.txt auf dem Bildschirm aus, egal wie lang diese Datei ist. Sollte die Datei sehr lang sein, dann werden Sie ein Flimmern über dn Bilschhirm laufen sehen, den sie nicht so schnell lesen können, wie er auf dem Bildschirm erscheint. Dann brauchen Sie ein anderes Programm, z.B. das Programm more, dass den Inhalt der Datei Häppchenweise ausgibt, wie im nächsten Abschnitt beschrieben.


more

Das Kommando

 $ more file.txt

gibt den Inhaltr der Datei file.txt auf dem Bildscvhirm aus, so ähnlich wie cat. Enthält die Datei jedoch mehr Zeilen, als auf einem Bildschirm passen, so gibt more (im Gegensatz zu cat) nur so viele Zeilen aus, wie auf den Bildschirm passen - und wartet danach, bis Sie die Leertaste drücken, danach kommen die nächsten Zeilen (maximal so viele, wie auf einen Bildschirm passen) usw. bis die Datei vollständig angezeigt wurde.

Unixtools 01 more.png

Für die Profis unter Ihnen:

  • Solange die Datei noch nicht vollständig angezeigt wurde, zeigt more in der linken unteren Ecke an, wie viel Prozent des Inhalts Sie schon gesehen haben.
  • Mit <Leerzeichen> blättern Sie eine Seite weiter
  • Mit <Enter> wird genau eine weitere Zeile angezeigt
  • Drücken Sie /, so können Sie danach ein Wort (genauer gesagt: Ein Text-Muster) angeben. more überspring dann alle Zeilen, bis es diesen Text (dieses Text-Muster) gefunden hat.
  • Wenn Sie sehr neugierig sind, welche weiteren Möglichkeiten Ihnen more bietet, geben Sie ? ein, und dann werden Sie es erfahren

wc

Das Kommando wc (word count = Wörter zählen) liesst die angegebene Datei und zählt dabei, wie viele Worte es gesehen hat. Ebenso wird die Anzahl der Zeilen und die Anzahl der Buchstaben angegeben.

 $gruenau4 jpr 14 ( ~ ) $ wc file.txt
 48  96 405 file.txt


Sollte Sie von diesen drei Angaben nur eine interessieren, dann rufen Sie das Kommando wc mit einer geeigneten Option auf, und es wird sein Verhalten entsprechend ändern. Welche Optionen es gibt, erfahren Sie (wie bei den meisten andreen Kommandos auch, wenn Sie das Kommasndo mit der Option --help aufrufen.

 $ gruenau4 jpr 13 ( ~ ) $ wc --help
 -c, --bytes            Byteanzahl ausgeben
 -m, --chars            Zeichenanzahl ausgeben
 -l, --lines            Zeilenanzahl ausgeben
 -L, --max-line-length  die Länge der längsten Zeile ausgeben
 -w, --words            Wortanzahl ausgeben


Sie können das Kommando wc auch für mehr als eine Datei aufrufen, zum Beispiel mit 2 Dateien:

 $gruenau4 jpr 16 ( ~ ) $ wc file.txt anotherfile.txt
   48   96  405 file.txt
   34   54  144 anotherfile.txt
   82  150  549 insgesamt

grep

Sie haben eine wirklich lange Datei und Sie fragen sich, ob es irgendwo darin eine Zeile gibt, in der das Wort 'foobar' vorkommt? Dann hilft Ihnen das Programm grep. Wenn Sie das Kommando grep aufrufen, geben Sie zunächst das an, wonach Sie suchen (das Muster) und danach eine oder mehrere Dateien, die grep sich (in dieser Reihenfolge) ansehen soll.

 $gruenau4 jpr 18 ( ~ ) $ grep 14 file.txt
 Zeile 14


Findet grep eine Zeile, in der (vielleicht nehen anderen Dingen) das gesuchte Muster steht, so gibt es diese Zeile aus. Sollte grep mehrere Dateien durchsuchen, so gibt grep zusätzlich den Namen der Datei aus, in der es die gesuchte Zeile gefunden hat.

 gruenau4 jpr 19 ( ~ ) $ grep 14 file.txt anotherfile.txt
 file.txt:Zeile 14

In Verbindung mit Wildcards ist dies sehr nützlich. Fragen Sie sich beispielsweise, in welcher *.txt -Datei wohl eine Zeile mit der Zeichenfolge 14 steht, dann spezifizieren Sie alle in Frage kommenden Dateien über eine Wildcard:

 gruenau4 jpr 20 ( ~ ) $ grep 14 *.txt
 file.txt:Zeile 14

Zur Erinnerung: Bevor die Shell das Kommando grep ausführt, ersetzt es die wildcard '*.txt' durch die Namen aller Dateien, die auf die Wildcard *.txt passen. In diesem Fall sind dies alle Dateien ihres aktuellen Working Directories, die auf .txt enden. Grep wird dann alle diese Dateien nach Zeilen durchsuchen, die 14 enthalten. Findet es welche, so gibt es den Namen der Datei, sowie die gesamte gefundene Zeile aus. Im obigen Beispiel gibt es also nur eine Datei, die das gesuchte Muster enthält

tail

head

find

Expert Tipp: grep muster $(find / -name patern -print)