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
usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]]
        [-e pattern] [-f file] [--binary-files=value] [--color=when]
        [--context[=num]] [--directories=action] [--label] [--line-buffered]
        [--null] [pattern] [file ...]

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
../.hypothesis
../.hypothesis/unicode_data
../.hypothesis/unicode_data/14.0.0
../unix-shell
../.ipynb_checkpoints

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

[8]:
!find . -type f
./index.rst
./sorted-length.txt
./create-delete.ipynb
./length.txt
./dvc.list
./file-system.ipynb
./pipes-filters.ipynb
./shell-variables.ipynb
./grep-find.ipynb

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

[9]:
!find . -mtime -1
.
./sorted-length.txt
./create-delete.ipynb
./length.txt
./dvc.list
./file-system.ipynb
./pipes-filters.ipynb
./grep-find.ipynb

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

[10]:
!find .. -name "*.rst"
../index.rst
../unix-shell/index.rst
../extensions.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
     441 ../unix-shell/index.rst
    2281 ../extensions.rst
    1216 ../start.rst
    4829 total

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
./create-delete.ipynb
./file-system.ipynb
./pipes-filters.ipynb
./shell-variables.ipynb
./grep-find.ipynb