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