grep

In der Standard-Ausgabe suchen[Bearbeiten | Quelltext bearbeiten]

Die Standard-Ausgabe ist das, was du mit dem print-Befehl ausgibst. Auch andere Shell-Programme schreiben auf die Standard-Ausgabe (auch standard out genannt), z. B. der folgende Befehl listet alle Pakete auf, die das Wort 'test' enthalten:

zypper se test

Probiere es aus.

Mit dem Pipe-Symbol (|) kann man einen Shell-Ausgabestrom in ein anderes Programm umleiten. Ein Programm, das man oft auf die rechte Seite der Pipe schreibt ist grep, ein Suchprogramm.

Beispiel:

zypper se test | grep samba

Jetzt werden nur noch Zeilen ausgegeben, die das Wort samba enthalten. Außerdem wird das Wort hervorgehoben.

Beispiele / Zufallszeichenketten[Bearbeiten | Quelltext bearbeiten]

Hier ein Programm, dass Zufallszeichenketten ausgibt:

#!/usr/bin/python3

import random

i = 0
while (True):
    s = ""
    for a in range(0, 20):
        c = random.randint(65, 122)
        s += chr(c)
    print(str(i) + ":" + s)
    i += 1

Speichere es in der Datei rand-chr.py und lass das Programm laufen.

Dann probiere der Reihe nach folgende Zeilen aus und schaue, was passiert:

./rand-chr.py | grep 0000
./rand-chr.py | grep -i gre

Übung[Bearbeiten | Quelltext bearbeiten]

  • Suche mit grep nach deinem Namen in den Zufallsbuchstaben (nur die ersten 3 Buchstaben, sonst könnte es länger dauern)

Die Prozessorauslastung anschauen[Bearbeiten | Quelltext bearbeiten]

Außer dem Strg+C kannst du ein Programm auch anders beenden. Drücke

Strg+Esc

um den System-Monitor zu öffnen. Damit kannst du unter anderem jedes Programm suchen und beenden ("kill").

Frage: Warum z. B. nur 25 % statt 100 %? (Tipp: verwende ksysguard, um herauszufinden, wieviele Prozessor-Kerne deine CPU hat.)

Bonus: Reguläre Ausdrücke[Bearbeiten | Quelltext bearbeiten]

(TODO: erklären was reguläre Ausdrücke sind)

./rand-chr.py | grep '\(abc\)\|\(def\)'
./rand-chr.py | grep -i -E '(abc)|(def)'
./rand-chr.py | grep -E '([abcdefg]abc)|(def.*a)'

Für zuhause: Sprachausgabe[Bearbeiten | Quelltext bearbeiten]

Installiere das Programm espeak.

Schreibe ein kleines Zähl-Programm, das Zahlen ausgibt und speichere es in der Datei counter.py.

#!/usr/bin/python3

i = 0
while (True):
    print(i)
    i += 1

Probiere folgende Befehle aus:

./counter.py | espeak
./counter.py | espeak -vde
./counter.py | grep --line-buffered 1111 | espeak -vde


Interne Anmerkung[Bearbeiten | Quelltext bearbeiten]

  • grep scheint nicht zu funktionieren, wenn das Python-Programm sleep verwendet, um die Ausgabegeschwindigkeit zu drosseln. Warum? -> Lösung: import sys, sys.stdout.flush()
 ZurückWeiter