grep und find#

grep#

grep findet Zeilen in Dateien, die einem regulären Ausdruck entsprechen. Im folgenden Beispiel wird nach der Zeichenkette Python gesucht:

[1]:
!grep Python ../index.rst
IPython
`IPython <https://ipython.org/>`_ oder *Interactive Python* war zunächst ein
erweiterter Python-Interpreter, der nun zu einem umfangreichen Projekt geworden
bereitstellen soll. So ist IPython heute nicht nur eine interaktive
Schnittstelle zu Python, sondern bietet auch eine Reihe nützlicher syntaktischer
Ergänzungen für die Sprache. Darüberhinaus ist IPython eng mit dem
    * `Miki Tebeka - IPython: The Productivity Booster

Die Option -w begrenzt die Treffer auf die Wortgrenzen, so dass IPython ignoriert wird:

[2]:
!grep  -w Python ../index.rst
`IPython <https://ipython.org/>`_ oder *Interactive Python* war zunächst ein
erweiterter Python-Interpreter, der nun zu einem umfangreichen Projekt geworden
Schnittstelle zu Python, sondern bietet auch eine Reihe nützlicher syntaktischer

-n zeigt die Zeilennummern an, die übereinstimmen:

[3]:
!grep  -n -w Python ../index.rst
4:`IPython <https://ipython.org/>`_ oder *Interactive Python* war zunächst ein
5:erweiterter Python-Interpreter, der nun zu einem umfangreichen Projekt geworden
8:Schnittstelle zu Python, sondern bietet auch eine Reihe nützlicher syntaktischer

-v invertiert unsere Suche

[4]:
!grep  -n -v "^ " ../index.rst
1:IPython
2:=======
3:
4:`IPython <https://ipython.org/>`_ oder *Interactive Python* war zunächst ein
5:erweiterter Python-Interpreter, der nun zu einem umfangreichen Projekt geworden
6:ist, das Tools für den gesamten Lebenszyklus der Forschungsdatenverarbeitung
7:bereitstellen soll. So ist IPython heute nicht nur eine interaktive
8:Schnittstelle zu Python, sondern bietet auch eine Reihe nützlicher syntaktischer
9:Ergänzungen für die Sprache. Darüberhinaus ist IPython eng mit dem
10:`Jupyter-Projekt <https://jupyter.org/>`_ verbunden.
11:
12:.. seealso::
15:
16:.. toctree::
20:

grep hat viele andere Optionen. Um herauszufinden, welche das sind, könnt ihr folgendes eingeben:

[5]:
!grep --help
Aufruf: grep [OPTION]… MUSTER [DATEI]…
Nach MUSTER in jeder DATEI oder der Standardeingabe suchen.
Beispiel: grep -i 'Hallo Welt' menu.h main.c
MUSTER kann mehrere durch Zeilenumbruch getrennte Muster enthalten.

Auswahl und Interpretation von Mustern:
  -E, --extended-regexp     MUSTER sind erweiterte reguläre Ausdrücke
  -F, --fixed-strings       MUSTER sind Zeichenketten
  -G, --basic-regexp        MUSTER sind reguläre Standardausdrücke
  -P, --perl-regexp         MUSTER sind reguläre Ausdrücke, wie Perl
                            sie akzeptiert
  -e, --regexp=MUSTER       MUSTER zur Treffersuche verwenden
  -f, --file=DATEI          MUSTER aus DATEI lesen
  -i, --ignore-case         Unterschied zwischen Groß- und Kleinschreibung
                             ignorieren
      --no-ignore-case      Festlegung zur Groß- oder Kleinschreibung
                              nicht ignorieren
  -w, --word-regexp         MUSTER passt nur auf ganze Wörter
  -x, --line-regexp         MUSTER passt nur auf ganze Zeilen
  -z, --null-data           Eine Zeile endet mit Nullbyte, nicht Newline

Verschiedenes:
  -s, --no-messages         Fehlermeldungen unterdrücken
  -v, --invert-match        Nicht-passende Zeilen anzeigen
  -V, --version             Versionsnummer ausgeben und beenden
      --help                Diese Hilfe ausgeben und beenden

Steuerung der Ausgabe:
  -m, --max-count=ANZAHL    stoppt nach ANZAHL ausgewählter Zeilen
  -b, --byte-offset         gibt mit den Zeilen auch den Abstand in Bytes an
  -n, --line-number         gibt mit den Zeilen auch die Zeilennummer an
      --line-buffered       leert den Puffer nach jeder Zeile
  -H, --with-filename       gibt den Dateinamen für jede Übereinstimmung aus
  -h, --no-filename         unterdrückt die Ausgabe des vorangehenden
                             Dateinamens
      --label=BEZEICHNUNG   verwendet BEZEICHNUNG als Präfix für Dateinamen
                            der Standardeingabe
  -o, --only-matching       zeigt nur den nicht-leeren Teil einer Zeile,
                            der zu MUSTER passt
  -q, --quiet, --silent     unterdrückt alle normalen Ausgaben
      --binary-files=TYP    alle binären Dateien sind vom Typ TYP;
                            TYP kann „binary“, „text“ oder „without-match“
                             sein
  -a, --text                gleichbedeutend mit --binary-files=text
  -I                        gleichbedeutend mit --binary-files=without-match
  -d, --directories=AKTION  beschreibt, wie Verzeichnisse zu behandeln sind;
                              AKTION kann „read“, „recurse“ oder „skip“ sein
  -D, --devices=AKTION      Behandlung von Geräten, FIFOs oder Sockets;
                              AKTION kann „read“ oder „skip“ sein
  -r, --recursive           wie --directories=recurse
  -R, --dereference-recursive
                            ebenso, folgt aber allen symbolischen Links
      --include=DATEIMUSTER  durchsucht nur Dateien, die DATEIMUSTER
                              entsprechen
      --exclude=DATEIMUSTER  überspringt Dateien, die
                              DATEIMUSTER entsprechen
      --exclude-from=DATEI   überspringt Dateien, die einem Dateimuster
                              in DATEI entsprechen.
      --exclude-dir=MUSTER   überspringt Verzeichnisse, die MUSTER
                              entsprechen
  -L, --files-without-match  nur die Namen von Dateien ausgeben, die keinen
                              passenden Inhalt haben
  -l, --files-with-matches   nur die Namen von Dateien mit passendem Inhalt
                              ausgeben
  -c, --count                nur die Anzahl der passenden Zeilen pro DATEI
                              ausgeben
  -T, --initial-tab          Tabulatoren (wenn nötig) ausrichten
  -Z, --null                 ein 0-Byte nach einem Dateinamen ausgeben

Kontextsteuerung:
  -B, --before-context=ANZAHL  ANZAHL Zeilen vorausgehenden Kontextes
                                ausgeben
  -A, --after-context=ANZAHL   ANZAHL Zeilen nachfolgenden Kontextes
                                ausgeben
  -C, --context=ANZAHL         ANZAHL Zeilen Kontext ausgeben
  -ANZAHL                   Wie --context=ANZAHL
      --color[=WANN],
      --colour=[WANN]       Passende Textfragmente markieren
                            WANN kann „always“, „never“ oder „auto“ sein
  -U, --binary              CR-Zeichen am Zeilenende belassen
                             (MSDOS/Windows)

Wenn DATEI „-“ ist, wird die Standardeingabe gelesen. Ohne DATEI wird „.“
gelesen, wenn -r auf der Befehlszeile angegeben wurde, ansonsten „-“.
Wenn weniger als zwei DATEIen angegeben wurden, wird -h angenommen.
Der Rückgabewert ist 0, wenn eine Zeile passte (oder eine Datei,
falls -L angegeben wurde), ansonsten 1. Wenn ein Fehler auftrat
und -q nicht angegeben wurde, ist der Rückgabewert 2.

Melden Sie Übersetzungsfehler an <translation-team-de@lists.sourceforge.net>,
Programmfehler dagegen (auf Englisch, mit LC_ALL=C) an bug-grep@gnu.org
GNU grep Homepage: <http://www.gnu.org/software/grep/>
Allgemeine Hilfe zur Benutzung von GNU-Software: <https://www.gnu.org/gethelp/>

Im folgenden Beispiel verwenden wir die Option -E und setzen das Muster in Anführungszeichen, damit die Shell nicht versucht, es zu interpretieren. ^ im Muster verankert die Übereinstimmung am Anfang der Zeile und . entspricht einem einzelnen Zeichen.

[6]:
!grep -n -E "^.Python" ../index.rst
1:IPython

find#

find . sucht in diesem Verzeichnis, wobei die Suche mit -type d auf Verzeichnisse beschränkt wird.

[7]:
!find .. -type d
..
../mypackage
../.ipynb_checkpoints
../unix-shell
../unix-shell/.ipynb_checkpoints

Mit -type f ist die Suche auf Dateien beschränkt.

[8]:
!find . -type f
./regex.ipynb
./index.rst
./create-delete.ipynb
./file-system.ipynb
./shell-variables.ipynb
./grep-find.ipynb
./pipes-filters.ipynb

Mit -mtime wird die Suche auf die letzten X Tage beschränkt, in unserem Beispiel auf den letzten Tag:

[9]:
!find . -mtime -1
.
./regex.ipynb
./.ipynb_checkpoints
./.ipynb_checkpoints/regex-checkpoint.ipynb
./grep-find.ipynb

Mit -name könnt ihr die Suche nach Dateinamen filtern.

[10]:
!find .. -name "*.rst"
../index.rst
../extensions.rst
../unix-shell/index.rst
../start.rst

Jetzt zählen wir die Zeichen in den Dateien mit der Endung .rst:

[11]:
!wc -c $(find .. -name "*.rst")
 891 ../index.rst
2281 ../extensions.rst
 457 ../unix-shell/index.rst
1209 ../start.rst
4838 insgesamt

Es ist auch möglich, in diesen Dateien nach einem regulären Ausdruck zu suchen:

[12]:
!grep "ipython.org" $(find .. -name "*.rst")
../index.rst:`IPython <https://ipython.org/>`_ oder *Interactive Python* war zunächst ein

Schließlich filtern wir alle Ergebnisse heraus, deren Pfad ipynb_checkpoints enthält:

[13]:
!find . -name "*.ipynb" | grep -v ipynb_checkpoints
./regex.ipynb
./create-delete.ipynb
./file-system.ipynb
./shell-variables.ipynb
./grep-find.ipynb
./pipes-filters.ipynb