mit grep rumsauen... 1 teil anzeigen, 1 teil in datei schreiben

dettus

Bicycle User
hi!

ich hab hier gerade folgendes problem:
und zwar habe ich ein ziemlich grosses logfile, und aus dem moechte ich mir alle zeilen, in denen das wort "ID" steht in eine datei schreiben lassen, und alle zeilen, in denen das wort "fehler" auftaucht sofort anzeigen.

mit folgendem code klappt das auch wunderbar:
Code:
egrep -i "(ID|fehler)" transcript.log >bla.txt
grep -i fall bla.txt
grep ID bla.txt >IDs33.txt

leider muss ich dabei noch immer den unschoenen umweg ueber die datei bla.txt machen.
weiss jemand, wie ich das nur mit pipes hinkriege?
 
mit einer Pipe? also den output von grep1 an grep2 umleiten mittels "|".
schaut dann so aus:

Code:
grep Error grosses.log | grep Fatal > Fatal_Errors.log

Edit: ok, du kennst Pipes schon, hätte mich zu sehr gewundert, man soll aufmerksamer lesen. Aber mein Code hilft vielleicht trotzdem.
 
Zuletzt bearbeitet:
*g* neeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
das was du geschrieben hast sucht zwar alle fatal errors aus grosses.log, zeigt mir dabei aber nicht die normalen (und nur die) an.
 
Hi,

probier doch mal die erste Ausgabe mit tee nach stdout zu schreiben, stderr, nach dem ersten Pattern zu durchsuchen, dahinter stderr, nach stdout umzuleiten und durch die nächste pip zu schicken.

Also vom Ansatz her sowas:

(egrep -i "(ID|fehler)" transcript.log | tee /dev/stderr | egrep -i ID > IDs33.txt 2> /dev/stdout) | egrep -i fehler > error.txt

Muss man sicher noch dran schrauben - ist ungetestet und wird so sicher nicht gehen
 
Was spricht dagegen, es kurz und knapp mit sed(1) zu erledigen?

Code:
< input sed -n '/foo/p; /bar/w output'

Gibt alle Zeilen mit "foo" aus und alle Zeilen mit "bar" werden in die Datei "output" geschrieben. Das funktioniert auch, wenn die Zeile "foobar" enthaelt.
 
Zurück
Oben