grep: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 22: Zeile 22:
{| class=wikitable width=100%
{| class=wikitable width=100%
! width=10% | Option !! Beschreibung
! width=10% | Option !! Beschreibung
|-
| <tt>-A 1</tt> || Zusätzliche Ausgabe der Zeile <b>nach</b> der gesuchten.
|-
| <tt>-B 1</tt> || Zusätzliche Ausgabe der Zeile <b>vor</b> der gesuchten.
|-
|-
| <tt>--color</tt> || Zuordnung von Farben zum gefundenen Suchmuster gemäss der Variable "GREP_COLOR".
| <tt>--color</tt> || Zuordnung von Farben zum gefundenen Suchmuster gemäss der Variable "GREP_COLOR".
Zeile 27: Zeile 31:
| <tt>-h</tt> || Unterdrückung der Anzeige der Dateinamen.
| <tt>-h</tt> || Unterdrückung der Anzeige der Dateinamen.
|-
|-
| <tt>-i</tt> || Keine Unterscheidung zwischen Gross- und Klienschreibung.
| <tt>-i</tt> || Keine Unterscheidung zwischen Gross- und Kleinschreibung.
|-
| <tt>-l</tt> || Anzeige nur des Dateinamens.
|-
|-
| <tt>-v</tt> || Ausgabe der Zeilen, die das Suchmuster <b>nicht</b> enthalten.
| <tt>-v</tt> || Ausgabe der Zeilen, die das Suchmuster <b>nicht</b> enthalten.
Zeile 71: Zeile 77:


  $ <b>grep -iv Unkingen datei1</b>
  $ <b>grep -iv Unkingen datei1</b>
Ausgabe aller Zeilen der Datei "file.txt", die entweder "foo" oder "bar" oder beide enthalten (ODER-Verknüpfung).
$ <b>grep -e "foo" -e "bar" file.txt</b>
Ausgabe aller Zeilen der Datei "file.txt", die sowohl "foo" als auch "bar" enthalten (UND-Verknüpfung).
$ <b>grep "foo" file.txt | grep "bar"</b>


Ausgabe einer Liste aller ksh- oder bash-Prozesse.
Ausgabe einer Liste aller ksh- oder bash-Prozesse.
Zeile 128: Zeile 142:
  $ <b>grep '.*:.:.*:1004:' /etc/passwd</b>
  $ <b>grep '.*:.:.*:1004:' /etc/passwd</b>
  kurs4:x:1004:10:KURS user:/usr/kurs4:/usr/bin/ksh
  kurs4:x:1004:10:KURS user:/usr/kurs4:/usr/bin/ksh
Die PDF-Datei "datei.pdf" wird nach dem Suchbegriff "abc" durchsucht.
$ <b>pdftotext datei.pdf - | grep abc</b>
== Fehlermeldungen ==
=== Die Argumentliste ist zu lang ===
$ <b>grep '|' *aseq</b>
bash: /bin/grep: Die Argumentliste ist zu lang
Mögliche Lösung.
* https://stackoverflow.com/questions/29727135/error-grep-argument-list-too-long
$ <b>find . -name "*.aseq" -exec grep '|' {} \;</b>
== Weblinks ==


{{Weblinks}}
{{Weblinks}}

Aktuelle Version vom 25. April 2024, 15:05 Uhr

Der Shell-Befehl grep (von "global/regular expression/print" bzw. "global search for a regular expression and print out matched lines") durchsucht eine oder mehrere Dateien nach einer bestimmten Zeichenfolge. Historisch entwickelte sich der Name aus dem Kommando "g/re/p" des Unix-Standardeditors ed.

Die folgenden sind Varianten von grep.

  • agrep ermöglicht eine unscharfe Suche nach Zeichenketten.
  • egrep ist eine erweiterte Form des Befehls.
  • fgrep sucht eine fixe Zeichenkette.

Konfiguration

Anzeige der dem gefundenen Suchmuster zugeordneten Farben:.

$ echo $GREP_COLOR

Zuordnung einer türkisen, unterstrichenen Schrift auf einem Hintergrund in Magenta für das gefundene Suchmuster.

$ export GREP_COLOR="04;36;45"

Um die Variable dauerhaft zu setzen, muss sie in die Datei "~/.bashrc" eingetragen werden.

Optionen

Option Beschreibung
-A 1 Zusätzliche Ausgabe der Zeile nach der gesuchten.
-B 1 Zusätzliche Ausgabe der Zeile vor der gesuchten.
--color Zuordnung von Farben zum gefundenen Suchmuster gemäss der Variable "GREP_COLOR".
-h Unterdrückung der Anzeige der Dateinamen.
-i Keine Unterscheidung zwischen Gross- und Kleinschreibung.
-l Anzeige nur des Dateinamens.
-v Ausgabe der Zeilen, die das Suchmuster nicht enthalten.

Syntax

Ausgabe der Zeilen von Datei "file", die "suchmuster" enthalten.

$ grep suchmuster file

Ausgabe der Namen aller Dateien im aktuellen Verzeichnis und allen Unterverzeichnissen, in denen "suchmuster" vorkommt, wobei nicht auf Gross- oder Kleinschreibung geachtet wird.

$ grep -lir "suchmuster" *

Ausgabe der Zeilen von Datei "file", die "suchmuster" enthalten. Dabei muss "suchmuster" links und rechts durch Leerzeichen oder Sonderzeichen begrenzt sein.

$ grep -w suchmuster file

Ausgabe der Zeilen von Datei "file", die "suchmuster" enthalten.

$ egrep suchmuster file

Ausgabe der Zeilen von Datei "file", die "-suchmuster" (mit vorangestelltem Strich) enthalten.

$ egrep -e -suchmuster file

Verwendung

Ausgabe aller Zeilen von Dateien, die auf ".txt" enden und die die Zeichenfolge "Linux" enthalten.

$ grep Linux *.txt

Ausgabe aller Zeilen von Dateien, die auf ".txt" enden und die die Zeichenfolge "Linux" enthalten. Die Zeichenfolge "Linux" wird in der Ausgabe rot eingefärbt.

$ grep --color=auto Linux *.txt

Ausgabe aller Zeilen von "datei1", die das Wort "Unkingen" enthalten. Dabei wird Gross- und Kleinschreibung nicht beachtet.

$ grep -i Unkingen datei1

Ausgabe aller Zeilen von "datei1", die das Wort "Unkingen" nicht enthalten. Dabei wird Gross- und Kleinschreibung nicht beachtet.

$ grep -iv Unkingen datei1

Ausgabe aller Zeilen der Datei "file.txt", die entweder "foo" oder "bar" oder beide enthalten (ODER-Verknüpfung).

$ grep -e "foo" -e "bar" file.txt

Ausgabe aller Zeilen der Datei "file.txt", die sowohl "foo" als auch "bar" enthalten (UND-Verknüpfung).

$ grep "foo" file.txt | grep "bar"

Ausgabe einer Liste aller ksh- oder bash-Prozesse.

$ ps -ef | egrep 'ksh|bash'

Ausgabe einer Liste aller Prozesse, deren Namen mit "sh" enden.

$ ps -ef | egrep '[a-z]*.sh'

Ausgabe aller Zeilen von "datei1", die entweder "meier" oder "huber" enthalten, wobei Gross- und Kleinschreibung nicht beachtet werden.

$ egrep -i "meier|huber" datei1

Ausgabe aller Zeilen von "datei1", die am Zeilenanfang das Wort "meier" enthalten, wobei Gross- und Kleinschreibung nicht beachtet werden.

$ egrep -i "^meier" datei1

Findet alle Zeilen! (nicht nur diejenigen, diejenigen die eine Zahl enthalten)

$ egrep "[0-9]*" datei1

Ausgabe aller Zeilen von "datei1", die mit der Zeichenfolge "m" beginnen und danach irgendwo "8" enthalten, wobei Gross- und Kleinschreibung nicht beachtet werden.

$ egrep -i "^m.*8" datei1

Ausgabe aller Zeilen von "datei1", die mit dem Zeichen "D" oder "d" beginnen, danach aber von einem der Zeichen a, e, i, o, u gefolgt werden oder nach Zeichen, die "Huber" enthalten", wobei Gross- und Kleinschreibung nicht beachtet werden.

$ egrep -i "[^Dd][aeiou]|Huber" datei1

Ausgabe einer Liste aller Prozesse, die "ksh" heissen.

$ ps -ef | fgrep ksh

Ausgabe einer Liste aller Dateien im Verzeichnis "/usr/include/sys/*.h", in denen die Zeichenkette "socklen_t" vorkommt.

$ fgrep -l socklen_t /usr/include/sys/*.h

Ausgabe einer Liste mit allen Dateien im Verzeichnis "/usr/include/sys/*.h", in denen der Begriff "sock[a-z]*t" vorkommt.

$ grep -l 'sock[a-z_]*t' /usr/include/sys/*.h

Liste aller Benutzer in der Datei "/etc/passwd", die in der gleichen Gruppe sind wie der aktuelle Benutzer.

$ grep /etc/passwd *:*:*:10:

Ausgabe der Anzahl Dateien im Verzeichnis "/usr/bin", bei denen das SUID gesetzt ist.

$ ls -l /usr/bin | grep '^-..s' | wc -l

Ausgabe der Dateinamen im Verzeichnis "/usr/bin", bei denen das SUID gesetzt und der Besitzer "root" ist.

$ ls -l /usr/bin | grep '^-..s.*[1-9] *root'

Ausgabe einer Liste aller Benutzer in der Datei "/etc/passwd", die in der Gruppe 1004 sind.

$ grep '.*:.:.*:1004:' /etc/passwd
kurs4:x:1004:10:KURS user:/usr/kurs4:/usr/bin/ksh

Die PDF-Datei "datei.pdf" wird nach dem Suchbegriff "abc" durchsucht.

$ pdftotext datei.pdf - | grep abc

Fehlermeldungen

Die Argumentliste ist zu lang

$ grep '|' *aseq
bash: /bin/grep: Die Argumentliste ist zu lang

Mögliche Lösung.

$ find . -name "*.aseq" -exec grep '|' {} \;

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
Wikipedia ger grepwbm Enzyklopädischer Artikel
Wikipedia eng grepwbm Enzyklopädischer Artikel