mit grep mehrere zeilen auslesen

B

bloody.bay

Grünschnabel
Hallo Community,

bin neu hier und hab direkt mal ne frage:

ich hab ne relativ große log-datei, aus der ich zeilen mit bestimmten kriterien auslesen will

das ganze sieht in etwa so aus (nur 1000e solcher datensätze):

Code:
09/20/2007 00:00:37 Sent accept response for user "MAC-ADRESSE" 
to client "xxx.xxx.xxx.xxx"
09/20/2007 00:00:37 Sending accounting response
09/20/2007 00:00:37 Sending accounting response
09/20/2007 00:00:46 Sending accounting response
09/20/2007 00:00:46 Sending accounting response
09/20/2007 00:02:22 _expandProfile: Config File 
(/opt/funk/radius/flarionXml.ctrl) requires that XML profile file (demo.xml) 
will be used for user ("MAC-ADRESSE")

09/20/2007 00:00:37 Sent accept response for user "ANDERE MAC-ADRESSE" 
to client "xxx.xxx.xxx.xxx"
09/20/2007 00:00:37 Sending accounting response
09/20/2007 00:00:37 Sending accounting response
09/20/2007 00:00:46 Sending accounting response
09/20/2007 00:00:46 Sending accounting response
09/20/2007 00:02:22 _expandProfile: Config File 
(/opt/funk/radius/flarionXml.ctrl) requires that XML profile file (demo.xml) 
will be used for user ("ANDERE MAC-ADRESSE")

mit dem kommando

Code:
Log=`grep "$Kartennummer" "./$Jahr$Monat$TagString.log"`

suche ich nach den zeilen mit "MAC-ADRESSE" , ich brauche aber auch die zeilen, die zwischen den der ersten und der letzten sind
das ganze ist ein zusammenhängender Datensatz und soll dann in ein Logfile geschrieben werden

in $Kartennummer steht die Mac-Adresse, die wird vorher aus einer Lookup-Table ausgelesn

./$Jahr$Monat$TagString.log ist immer die Logdatei vom aktuellen tag, die wird vom server so generiert, passt so

hat jemand ne idee wie ich den kompletten datensatz so wie er oben steht als einen block in ein logfile schreiben kann?

mit
Code:
echo "$Log" >> "./NAME_$Jahr$Monat$Tag.log"
schreibe ich nur die 2 zeilen mit der Mac-Adresse in ein Logfile, und die dazwischen fehlen mir, die ich aber dazu brauche

ich hab mir schon gedacht bei grep nach allen zeilen zu suchen die nicht die mac-adresse enthalten, aber das klappt nicht...
es sind ja mehrere mac-adressen die den gleichen datensatz haben

um hilfe wär ich seeeeehr dankbar :) :hilfe2:
 
Code:
grep -A 10 -B 10 .....

Mit den Parametern "-A" und "-B" kannst du die Anzahl der Zeilen angeben, die grep vor bzw. nach einem Treffer zusätzlich mit ausgeben soll.
 
ja soweit klar, aber die anzahl der zeilen davor bzw danach variieren...

es können 2 sein, es können aber auch 9 sein, das ist mein problem =/
hab ich unklar dargestellt sorry
 
Das Problem lässt sich so nicht mit grep lösen.
Da musst du schon zu anderen Shellmitteln greifen.
Entweder du baust dein grep in ein while read ein, und filterst darin weiter -> sehr uneffektiver Code,
Oder du verwendest sed oder perl oder zur Not auch awk.

Gruß Wolfgang
 
Hi,
wenn auch veraltet, möchte ich dennoch eine Lösung für das Problem beisteuern:

ja soweit klar, aber die anzahl der zeilen davor bzw danach variieren...

es können 2 sein, es können aber auch 9 sein, das ist mein problem =/
hab ich unklar dargestellt sorry

Geht eigentlich schon:

MAXZEILEN=Maximale Zeilenzahl die Du erwartest
suche="Deine MAC"
filename="your logfile"

# grep -A ${MAXZEILEN} "${suche}" ${filename} | grep -m 2 -B ${MAXZEILEN} "${suche}"

Einzige Bedingung für jeden Suche gibt es nur einen Block.

Gruß
Laubi
 
ja soweit klar, aber die anzahl der zeilen davor bzw danach variieren...

es können 2 sein, es können aber auch 9 sein, das ist mein problem =/
hab ich unklar dargestellt sorry
Und wann genau weißt Du, wieviele Zeilen Du drum herum brauchst...?

Kann man das an einer bestimmten Zeichenkette festmachen, die nach der MAC-Adresse folgt.......
 

Ähnliche Themen

Samba 4.1.11 Domänen anbindung funktioniert nicht !!!

Debian Routing Problem

Kein Internet mehr

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Debian Gateway

Zurück
Oben