• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Log suchen ohne bestimmte Textpassage

motu

Member
Hallo

Bis jetzt habe ich immer Log's gesucht die eine bestimmte Textpassage enthielten. Gemacht habe ich das mit

find -name "*.log" -exec grep -nsH "Textpassage" {} \; > Ergebins.txt

Kann mir jemand sagen wie ich es anstellen kann, dass mir nur die Log's angezeigt werden, die eben diese Textpassage nicht enthalten?



Gruss motu
 
OP
M

motu

Member
abgdf schrieb:
Vielleicht: "grep -v" verwenden ...

Danke für den Tipp abgdf... habe es mit grep -v auch schon versucht, leider werden mir dann alle Zeilen des Log's angezeigt, die den Text nicht enthalten. Geht es evtl. auch, dass nur der Name des Log's ausgegeben wird, bei welchem eben diese Textpassage nicht enthalten ist? Deiner Antwort nach zu urteilen sollte das nicht so problematisch sein :/ !?
 
OP
M

motu

Member
Muss mich noch ein wenig präzisieren. Ich habe jetzt wie folgt gesucht:

find -name "*.log" -exec grep -vl "Textpassage" {} \; > Ergebnis.txt

Jetzt werden mir aber sämtliche Dateinamen der Log's angezeigt, da natürlich in jedem Log eine Zeile existiert, die die Textpassage nicht enthält. Was ich aber suche ist, dass nur die Log's aufgeführt werden, die in ihrem Inhalt als ganzes die Textpassage nicht aufweisen. Also sobald irgendwo im Log die Textpassage gefunden wird, soll das Log nicht in der Ausgabe erscheinen.

Ich hoffe ich habe mich einigermassen verständlich ausgedrückt....
 

framp

Moderator
Teammitglied
Code:
find -name "*.log" -exec grep -vl "Textpassage" {} && echo "{}" \; > Ergebnis.txt
sollte tun. Das prinzip ist wie folgt:
Wenn grep KEIN match findet returned es true und echoed dann den Dateinamen. Leider gibt es da syntaktische Probleme dieses grep ... && echo in der einen Zeile einzugeben... Entweder findest Du heraus wie man das machen kann oder Du stellst die beiden Zeilen in ein kleines ShellScript und rufst das mit -exec miniScript.sh {} auf.
 
OP
M

motu

Member
Also wenn ich mit

Code:
find -name "*.log" -exec grep -vl "Textpassage" {} && echo "{}" \; > Ergebnis.txt
suche kommt die Meldung find: Fehlendes Argument für "-exec". Wahrscheinlich ist das das Problem das Du angesprochen hast. Ob ich das auf die Schnelle oder überhaupt herausfinden kann, bezweifle ich... :D

Aber wenn ich das mit einem Skript lösen könnte wäre das natürlich auch super. Wie würde denn das aussehen? In etwa so?

Code:
find -name "*.log" -exec script.sh > Ergebnis.txt

Inhalt script.sh
Code:
#!/bin/sh
grep -vl "Textpassage" {} &&
echo "{}" \;

Wahrscheinlich nicht wirklich, denn es funktioniert nicht :???: Kannst Du mir da evtl. auf die Sprünge helfen? Bin (wie man sieht) nicht so versiert in dem Gebiet :eek:ps:
 
Ich würde es über das Zählen der Fundstellen machen. Nicht gefunden gibt :0 am Ende.
Code:
find -name "*.log" -exec grep -cH "Textpassage" {} \; | grep :0 | sed 's/:0//'
Und anschliessend wird noch das :0 durch nichts ersetzt.

Haveaniceday
Edit: So sollte es eleganter sein:
Code:
find -name "*.log" -exec grep -cH "Textpassage" {} \;  | sed  '/:0$/!d;s/:0$//'
 
OP
M

motu

Member
Perfekt! So scheint es zu funktionieren :D Vielen Dank für die Hilfe haveaniceday!


Gruss motu
 
Oben