Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Und-Verknüpfung mit grep

634 views
Skip to first unread message

Knut Rauscher

unread,
Jul 31, 2001, 6:47:39 AM7/31/01
to
Hallo,

wie bekomme ich eine Und-Verknüpfung mit grep hin.
Eine oder funktioniert:

grep -l 'von\|nach' *

Ich möchte es erreichen, daß wenn in einer Datei ein
'von' und ein 'nach' stehen, der grep mir die Datei ausgibt.

Gruß

Knut

Robert Wirth

unread,
Jul 31, 2001, 7:53:45 AM7/31/01
to
In article <lug0bdn...@fms.de>,

Kann mit einem einfachen grep nicht gehen, weil grep ZEILENWEISE
arbeitet, also sich nicht merken kann, dass es schon eines der
beiden Woerter gefunden hat.

Eine Verkettung macht das Gewuenschte, wegen des mehrfachen
Auftretens des Dateinamens muss aber eine Schleife drum:

for file in *; do grep von $file >/dev/null && grep -l nach $file; done

GNU grep hat eine quiet option -q, dann gehts auch so:

for file in *; do grep -q von $file && grep -l nach $file; done

Analog haben egrep und fgrep die silent option -s.

Gruezi,

Robert
--
--------------------------------------------------------
Robert Wirth, Hauptstrasse 316, 66740 Saarlouis, Germany
office: +49-681-302-5078 priv: +49-6831-69484 or -964570
email: wi...@dfki.de <URL>: http://www.dfki.de/~wirth/
--------------------------------------------------------

Helmut Schellong

unread,
Jul 31, 2001, 8:08:17 AM7/31/01
to

Einen UND-Operator kenne ich in REs nicht.

Aber man kann -e RE -e RE -e RE schreiben, ob das UND
ist, weiß ich im Moment nicht.

Ich denke, da mußt Du schon einen richtigen Algo
programmieren.
Aber nicht einfach 'nach' oder so, denn 'demnach' würde
ja auch passen ...

--
Mit freundlichen Grüßen
Helmut Schellong po...@schellong.de po...@schellong.com
http://www.schellong.de http://www.schellong.com
http://home.t-online.de/home/schellong sche...@t-online.de

Robert Lange

unread,
Jul 31, 2001, 8:39:30 AM7/31/01
to
Knut Rauscher fragte:

> Ich möchte es erreichen, daß wenn in einer Datei ein
> 'von' und ein 'nach' stehen, der grep mir die Datei ausgibt.

Nicht elegant, sollte aber funktionieren:

grep -l von * | xargs grep -l nach

> Gruß
> Knut


.. Robert

Juergen P. Meier

unread,
Jul 31, 2001, 10:06:27 AM7/31/01
to

und wieso nicht

grep von * | grep nach

Bis auf das "nach" nicht im Dateinamen vorkommen sollte, sonst
matcht alles auf von dieser datei, geht das.

Juergen
--
J...@lrz.fh-muenchen.de - "This World is about to be Destroyed!"

Gunnar Ritter

unread,
Jul 31, 2001, 10:56:40 AM7/31/01
to
Helmut Schellong <sche...@t-online.de> wrote:

> Aber man kann -e RE -e RE -e RE schreiben, ob das UND
> ist, weiß ich im Moment nicht.

Nein, es entspricht »Oder«.

Grüße,
Gunnar

Gunnar Ritter

unread,
Jul 31, 2001, 11:01:01 AM7/31/01
to
Robert Wirth <wi...@dfki.de> wrote:

> GNU grep hat eine quiet option -q, dann gehts auch so:

»-q« ist POSIX.2, nur im traditionellen »grep« nicht enthalten.

> Analog haben egrep und fgrep die silent option -s.

Nein, »-s« bewirkt nur die Unterdrückung von Fehlermeldungen. Das
Verhalten von v7 und älteren BSDs in diesem Fall ist Geschichte,
standardisiert ist die System V-Semantik.

Grüße,
Gunnar

Helmut Schellong

unread,
Jul 31, 2001, 11:24:09 AM7/31/01
to
"Juergen P. Meier" wrote:
>
> Robert Lange <robert...@gmx.net> wrote:
> >Knut Rauscher fragte:
> >
> >> Ich möchte es erreichen, daß wenn in einer Datei ein
> >> 'von' und ein 'nach' stehen, der grep mir die Datei ausgibt.
> >
> >Nicht elegant, sollte aber funktionieren:
> >
> >grep -l von * | xargs grep -l nach
>
> und wieso nicht
>
> grep von * | grep nach

Die Dateinameninformation geht aber flöten ...

Juergen P. Meier

unread,
Jul 31, 2001, 1:02:00 PM7/31/01
to
Helmut Schellong <sche...@t-online.de> wrote:
>"Juergen P. Meier" wrote:
>>
>> Robert Lange <robert...@gmx.net> wrote:
>> >Knut Rauscher fragte:
>> >
>> >> Ich möchte es erreichen, daß wenn in einer Datei ein
>> >> 'von' und ein 'nach' stehen, der grep mir die Datei ausgibt.
>> >
>> >Nicht elegant, sollte aber funktionieren:
>> >
>> >grep -l von * | xargs grep -l nach
>>
>> und wieso nicht
>>
>> grep von * | grep nach
>
>Die Dateinameninformation geht aber flöten ...

Eben nicht.
Sie landen im Input des 2. grep, darum kann es auch zu fehlerhaften
matches fuehren, wenn das muster "nach" teil des Dateinamens ist.

Juergen P. Meier

unread,
Jul 31, 2001, 12:59:14 PM7/31/01
to
Helmut Schellong <sche...@t-online.de> wrote:
>"Juergen P. Meier" wrote:
>>
>> Robert Lange <robert...@gmx.net> wrote:
>> >Knut Rauscher fragte:
>> >
>> >> Ich möchte es erreichen, daß wenn in einer Datei ein
>> >> 'von' und ein 'nach' stehen, der grep mir die Datei ausgibt.
>> >
>> >Nicht elegant, sollte aber funktionieren:
>> >
>> >grep -l von * | xargs grep -l nach
>>
>> und wieso nicht
>>
>> grep von * | grep nach
>
>Die Dateinameninformation geht aber flöten ...

Wo?

Helmut Schellong

unread,
Jul 31, 2001, 1:21:18 PM7/31/01
to
"Juergen P. Meier" wrote:
>
> Helmut Schellong <sche...@t-online.de> wrote:
> >"Juergen P. Meier" wrote:
> >> >grep -l von * | xargs grep -l nach
> >>
> >> und wieso nicht
> >>
> >> grep von * | grep nach
> >
> >Die Dateinameninformation geht aber flöten ...
>
> Eben nicht.
> Sie landen im Input des 2. grep, darum kann es auch zu fehlerhaften
> matches fuehren, wenn das muster "nach" teil des Dateinamens ist.

>>> grep von * <<<

liefert Dateinamen?!

Helmut Schellong

unread,
Jul 31, 2001, 1:40:02 PM7/31/01
to
Urs Janßen wrote:
>
> In <3B66E90E...@t-online.de>,

> Helmut Schellong <sche...@t-online.de> wrote:
> > >>> grep von * <<<
> > liefert Dateinamen?!
>
> ach was, grep kennt -h nur zum spass...

grep -l ... liefert generell Dateinamen - nur die Namen.
grep ... liefert nur bei *mehreren* Dateiargs die Namen,
und das dann gemeinsam an allen Inhaltszeilen.
grep -h ... unterdrueckt dies.

Robert Lange

unread,
Jul 31, 2001, 11:23:50 AM7/31/01
to
Juergen P. Meier frug:

> Robert Lange <robert...@gmx.net> wrote:

>> grep -l von * | xargs grep -l nach

> und wieso nicht

> grep von * | grep nach

Funktioniert nur, wenn "von" und "nach" in derselben Zeile
vorkommen. Außerdem könnten einige Dateien mehrfach aufgelistet
werden.

> Juergen


.. Robert

Gerhard Schromm

unread,
Jul 31, 2001, 4:32:11 PM7/31/01
to
On Tue, 31 Jul 2001, Helmut Schellong told this:

> Urs Janßen wrote:
>>
>> In <3B66E90E...@t-online.de>,
>> Helmut Schellong <sche...@t-online.de> wrote:
>> > >>> grep von * <<<
>> > liefert Dateinamen?!
>>
>> ach was, grep kennt -h nur zum spass...
>
> grep -l ... liefert generell Dateinamen - nur die Namen.
> grep ... liefert nur bei *mehreren* Dateiargs die Namen,
> und das dann gemeinsam an allen Inhaltszeilen.

Dreimal darfst du raten was grep beim Aufruf 'grep bla *' zu sehen
bekommt.

> grep -h ... unterdrueckt dies.

bye Gerhard
--
Hi! I'm a .signature *virus*! Copy me into your ~/.signature to help me spread!

Helmut Hullen

unread,
Aug 1, 2001, 2:54:00 AM8/1/01
to
Hallo, Urs,

Du (urs) meintest am 31.07.01 zum Thema Re: Und-Verknuepfung mit grep:

> es waer nicht noetig gewesen _uns_ hier die manpage von grep
> nochmal verstuemmelt vorzukauen, _wir_ kennen sie.

Du bist eine multiple Persoenlichkeit?

Viele Gruesse!
Helmut

Helmut Schellong

unread,
Aug 1, 2001, 6:51:49 AM8/1/01
to

Obwohl er mehrfach vorhanden ist (12 Augen sehen mehr als 2)
hat er nicht geschnallt, daß ich zu denjenigen gehöre, die
den Quellkode eines grep mit regexp und vieler anderer
Kommandos entwickelt haben und somit ganz selbstverständlich
die manpage kennen...
Einige andere Dinge hat er ebenfalls übersehen.

Gunnar Ritter

unread,
Aug 1, 2001, 11:39:23 AM8/1/01
to
Helmut Schellong <sche...@t-online.de> wrote:

> hat er nicht geschnallt, daß ich zu denjenigen gehöre, die
> den Quellkode eines grep mit regexp und vieler anderer
> Kommandos entwickelt haben und somit ganz selbstverständlich
> die manpage kennen...

Das konnte man in <3B669FB1...@t-online.de> bestens sehen.

Grüße,
Gunnar

Helmut Schellong

unread,
Aug 1, 2001, 12:29:24 PM8/1/01
to
Gunnar Ritter wrote:
>
> Helmut Schellong <sche...@t-online.de> wrote:
>
> > hat er nicht geschnallt, daß ich zu denjenigen gehöre, die
> > den Quellkode eines grep mit regexp und vieler anderer
> > Kommandos entwickelt haben und somit ganz selbstverständlich
> > die manpage kennen...
>
> Das konnte man in news:3B669FB1...@t-online.de bestens sehen.

Ich darf darauf aufmerksam machen, daß KEINE man-Page,
die ich kenne, über die Semantik mehrerer -e expr
aufklärt!

Da steht drin:
"Mehrere -e Optionen sind erlaubt." --Punkt.
"Bei mehreren -e Optionen werden alle diese verwendet." --Punkt.

Folglich KENNE ich die manpage sehr wohl.

Da ich mehrere -e... selbst noch nie konkret programmiert habe,
hatte ich seriöserweise gesagt, daß ich nicht weiß, ob
die UND-verknüpft sind.

Mir zu unterstellen, ich kennte die grep-manpage nicht,
macht mich unglücklich und pH-sauer.

Gunnar Ritter

unread,
Aug 1, 2001, 2:20:46 PM8/1/01
to
Helmut Schellong <sche...@t-online.de> wrote:

> Ich darf darauf aufmerksam machen, daß KEINE man-Page,
> die ich kenne, über die Semantik mehrerer -e expr
> aufklärt!

Offenbar kannst Du nicht richtig lesen. Die UnixWare 7-Manualpage z.B.,
datiert »30 January 1998«, enthält ganz zu Anfang der »Description« den
folgenden Satz: »grep and egrep search files for patterns and print all
lines that contain a match to at least one of the patterns (in
expression and exprfile)«.

Für jemanden, der selbst programmiert, gibt es aber ohnehin nur eine
gültige Quelle: den Standard. ISO/IEC 9945-2:1993, 4.28.2, p. 295:

# The grep utility shall search the input files, selecting lines
# matching one or more patterns; the types of patterns shall be
# controlled by the options specified. The patterns are specified
# by the -e option, -f option, or the pattern_list operand. [...]
# By default, an input line shall be selected if any pattern,
# treated as an entire BRE [...] matches any part of the line [...]

4.28.3, p. 296:

# -e pattern_list
# Specify one or more patterns to be used during the search for input.
# [...] In the nonobsolescent forms, multiple -e and -f options shall
# be accepted by the grep utility. All of the specified patterns shall
# be used when matching lines, but the order of evaluation is unspecified.

Und wieder einmal sehen wir, daß man Dich als Entwickler einfach
nicht ernst nehmen kann.

> Da steht drin:
> "Mehrere -e Optionen sind erlaubt." --Punkt.
> "Bei mehreren -e Optionen werden alle diese verwendet." --Punkt.

Du »liest« deutsche Manualpages? Naja, bei Dir wundert mich sowieso
nichts mehr.

Grüße,
Gunnar

Juergen Salk

unread,
Aug 1, 2001, 2:35:55 PM8/1/01
to
Gunnar Ritter <g...@bigfoot.de> wrote:
> Helmut Schellong <sche...@t-online.de> wrote:

>> Ich darf darauf aufmerksam machen, daß KEINE man-Page,
>> die ich kenne, über die Semantik mehrerer -e expr
>> aufklärt!

In meiner HP-UX 10.20 man-page zu grep steht folgendes:

-e expression
Same as a simple expression argument, but useful
when the expression begins with a hyphen (-).
Multiple -e options can be used to specify multiple
patterns; an input line is selected if it matches
any of the specified patterns.

Die man-page von GNU grep hält sich da aber z.B. in der Tat sehr
bedeckt. Jedenfalls habe ich da auf die Schnelle nichts zu
multiplen -e Optionen finden können.


Beste Grüsse - Jürgen.

Helmut Schellong

unread,
Aug 1, 2001, 4:57:47 PM8/1/01
to
Juergen Salk wrote:
>
> Gunnar Ritter <g...@bigfoot.de> wrote:
> > Helmut Schellong <sche...@t-online.de> wrote:
>
> >> Ich darf darauf aufmerksam machen, daß KEINE man-Page,
> >> die ich kenne, über die Semantik mehrerer -e expr
> >> aufklärt!
>
> In meiner HP-UX 10.20 man-page zu grep steht folgendes:
>
> -e expression
> Same as a simple expression argument, but useful
> when the expression begins with a hyphen (-).
> Multiple -e options can be used to specify multiple
> patterns; an input line is selected if it matches
> any of the specified patterns.
>
expr\nexpr\expr

ist hier z.B. gar nicht beschrieben.

> Die man-page von GNU grep hält sich da aber z.B. in der Tat sehr
> bedeckt. Jedenfalls habe ich da auf die Schnelle nichts zu
> multiplen -e Optionen finden können.

Zum Beispiel.

Manche greps können grundsätzlich nur ein expr verarbeiten.

Helmut Schellong

unread,
Aug 1, 2001, 4:55:03 PM8/1/01
to
Gunnar Ritter wrote:
>
> Helmut Schellong <sche...@t-online.de> wrote:
>
> > Ich darf darauf aufmerksam machen, daß KEINE man-Page,
> > die ich kenne, über die Semantik mehrerer -e expr
> > aufklärt!
>
> Offenbar kannst Du nicht richtig lesen. Die UnixWare 7-Manualpage z.B.,
> datiert »30 January 1998«, enthält ganz zu Anfang der »Description« den
> folgenden Satz: »grep and egrep search files for patterns and print all
> lines that contain a match to at least one of the patterns (in
> expression and exprfile)«.

Das bezieht sich -exakt betrachtet- darauf, daß
expression == expr\nexpr\nexpr\nexpr
sein darf.

-e expression
Specify one or more patterns (regular expressions or strings)
to be used during the search for input. The patterns in
expression are separated by newline characters. Two adjacent
newlines indicate a null pattern. The last pattern does not
require a terminating newline. When multiple -e or -f options
are specified, all the patterns specified will be used.

Mehrere '-e expr' '-e expr' ...
können eine ganz andere Bedeutung haben.
(Ich persönlich würde so OR und AND realisieren.
Man denke an die find-Syntax -type -name ..., die verundet!)

Diese man-Page ist diesbez. schwammig und verunsichernd formuliert.
Ich würde hier erst probieren, bevor ich eine Aussage wagte.

OpenServer:
-----------
grep [ -E | -F ] [ -c | -l | -q ] [ -bhinsvxy ] [ -e expression ] [ -f

Commands of the grep family search the input files (or standard input if no
file argument is specified) for lines matching a pattern. Normally, each
matching line is copied to the standard output. If more than one file is
being searched, the name of the file in which each match occurs is also
written to the standard output along with the matching line (unless the -h
option is used, see below).

-e expression
Specify patterns to be used during the search. The patterns in the
list must be separated by a newline character. Multiple -e and -f
options are accepted. Unless the -E or -F options are specified,
grep treats the patterns as basic regular expressions.

Diese Page ist noch schlimmer.


> Für jemanden, der selbst programmiert, gibt es aber ohnehin nur eine
> gültige Quelle: den Standard. ISO/IEC 9945-2:1993, 4.28.2, p. 295:

Den hab ich nicht zur Verfügung, und werde ihn wohl nicht so
schnell oder sogar nie zur Verfügung haben.
Download-Drafts sind nämlich offenbar verschwunden...

Gunnar Ritter

unread,
Aug 1, 2001, 7:12:08 PM8/1/01
to
Helmut Schellong <sche...@t-online.de> wrote:

>> Für jemanden, der selbst programmiert, gibt es aber ohnehin nur eine
>> gültige Quelle: den Standard. ISO/IEC 9945-2:1993, 4.28.2, p. 295:
>
> Den hab ich nicht zur Verfügung,

Was geht mich das an? Wenn Du nur minderwertige SCO-Dokumentation
verwendest, ist das Dein Problem.

Grüße,
Gunnar

juergen salk

unread,
Aug 2, 2001, 3:20:15 AM8/2/01
to
Helmut Schellong <sche...@t-online.de> wrote:

> Manche greps können grundsätzlich nur ein expr verarbeiten.

Welche?

Beste Grüsse - Jürgen

Helmut Schellong

unread,
Aug 2, 2001, 8:05:01 AM8/2/01
to
juergen salk wrote:
>
> Helmut Schellong <sche...@t-online.de> wrote:
>
> > Manche greps können grundsätzlich nur ein expr verarbeiten.
>
> Welche?

Diejenigen auf etwas älteren Unices.

Andreas Riedel

unread,
Aug 6, 2001, 9:57:52 AM8/6/01
to
Knut Rauscher schrieb:

Genaugenommen (jedenfalls fast):

grep -l -e 'von.*nach\|nach.*von' *

Krümelkackend:

grep -l -e 'von.*nach\|nach.*von\|vonach' *

Wenn "von" immer vor "nach" steht (erscheint mir logisch), reicht auch

grep -l -e 'von.*nach' *

Gruß
Andreas

--
Those who desire to give up Freedom in order to gain Security,
will not have, nor do they deserve, either one. (T. Jefferson)

Andreas Riedel

unread,
Aug 6, 2001, 10:17:54 AM8/6/01
to
Andreas Riedel schrieb:

> Knut Rauscher schrieb:
>> wie bekomme ich eine Und-Verknüpfung mit grep hin.
>> Eine oder funktioniert:
>>
>> grep -l 'von\|nach' *
>>
>> Ich möchte es erreichen, daß wenn in einer Datei ein
>> 'von' und ein 'nach' stehen, der grep mir die Datei ausgibt.
>
> Genaugenommen (jedenfalls fast):
>
> grep -l -e 'von.*nach\|nach.*von' *

Nachtrag: Ich hatte übersehen, daß die Strings nicht in einer Zeile
stehen müssen. So wird es etwas komplizierter:

for i in * ; do
cat $i | tr -d "\n" | grep -q -e 'von.*nach\|nach.*von' && echo $i
done

In der "Krümelkackerversion" muß man tr -d "\n" durch tr "\n" " "
ersetzen, sonst matcht fälschlicherweise auch
vo
nach

Für den praktischen Einsatz sollten um "von" und "nach" Whitespaces
verlangt werden, damit es weniger "Fehltreffer" gibt. Auch dann ist
tr -d wieder ungeeignet.

Gunnar Ritter

unread,
Aug 6, 2001, 12:50:39 PM8/6/01
to
Andreas Riedel <andreas...@hrz.tu-chemnitz.de> wrote:

> Andreas Riedel schrieb:
>> Knut Rauscher schrieb:

>>> grep -l 'von\|nach' *

>> grep -l -e 'von.*nach\|nach.*von' *
>

> cat $i | tr -d "\n" | grep -q -e 'von.*nach\|nach.*von' && echo $i

So oft Ihr »a\|b« auch postet, es ist und bleibt eine proprietäre
GNU-RE, die man tunlichst nicht benutzen sollte. Zweimal »-e« ist
zwar nicht perfekt, aber immerhin standardisiert. Die portabelste
Lösung dürfte

[...] | egrep 'von.*nach|nach.*von' >/dev/null && echo $i

sein.

Grüße,
Gunnar

0 new messages