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 <http://ipython.org/>`_, or *Interactive Python*, was initially an
advanced Python interpreter that has now grown into an extensive project
Today, IPython is not only an interactive interface to Python, but also offers a
number of useful syntactic additions for the language. In addition, IPython is
    * `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 <http://ipython.org/>`_, or *Interactive Python*, was initially an
advanced Python interpreter that has now grown into an extensive project
Today, IPython is not only an interactive interface to Python, but also offers a

-n zeigt die Zeilennummern an, die übereinstimmen:

[3]:
!grep  -n -w Python ../index.rst
4:`IPython <http://ipython.org/>`_, or *Interactive Python*, was initially an
5:advanced Python interpreter that has now grown into an extensive project
7:Today, IPython is not only an interactive interface to Python, but also offers a

-v invertiert unsere Suche

[4]:
!grep  -n -v "^ " ../index.rst
1:IPython
2:=======
3:
4:`IPython <http://ipython.org/>`_, or *Interactive Python*, was initially an
5:advanced Python interpreter that has now grown into an extensive project
6:designed to provide tools for the entire life cycle of research computing.
7:Today, IPython is not only an interactive interface to Python, but also offers a
8:number of useful syntactic additions for the language. In addition, IPython is
9:closely related to the `Jupyter project <https://jupyter.org/>`_.
10:
11:.. seealso::
14:
15:.. toctree::
19:

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

[5]:
!grep --help
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-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
../unix-shell
../unix-shell/.ipynb_checkpoints
../.ipynb_checkpoints

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

[8]:
!find . -type f
./index.rst
./regex.ipynb
./create-delete.ipynb
./file-system.ipynb
./pipes-filters.ipynb
./shell-variables.ipynb
./.ipynb_checkpoints/grep-find-checkpoint.ipynb
./.ipynb_checkpoints/file-system-checkpoint.ipynb
./.ipynb_checkpoints/regex-checkpoint.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
.
./index.rst
./regex.ipynb
./create-delete.ipynb
./file-system.ipynb
./pipes-filters.ipynb
./shell-variables.ipynb
./.ipynb_checkpoints
./.ipynb_checkpoints/grep-find-checkpoint.ipynb
./.ipynb_checkpoints/file-system-checkpoint.ipynb
./.ipynb_checkpoints/regex-checkpoint.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")
     813 ../index.rst
     216 ../unix-shell/index.rst
    2096 ../extensions.rst
    1138 ../start.rst
    4263 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 <http://ipython.org/>`_, or *Interactive Python*, was initially an

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