Sed Group Inhalt als Variable abspeichern
Wenn es geht bräuchte ich verständlich nicht verkomplizierte Antworten. Ich bin normal Javaentwickler in Ausbildung, nur das ich noch vieles nebenher lerne u.a hier Shell und Perl Programmierung, Administration von Servern und und und. Keep it Simple oder gut erklärt. Ich möchte gerne auch verstehen warum ich was mache.
Moin,
ich habe folgenden Sachverhalt. Ich soll ein Script schreiben, welches ein Logfile Zeilenweise durchsucht und per Regex bestimmte Inhalte filtert, das Ergebnis soll dann in eine Datenbank geschrieben werden. Ich bin schon sehr weit gekommen und habe über den iterativen weg mich einer schon brauchbaren Lösung angenähert.
Ich denke ich zeige zu erst einmal um welche Codestelle es geht..
...Variablendeklaration
...Regex
...Datenbankfunktion
Mein Problem ist in dem ersten Zeile der while-Schleife, ich habe dort einen sed+Regex+group Audruck der auf jede Zeile des Logiles angewandt wird $line.
Das Ergebnis wird dann in tmp geschrieben. Ok das geht auch alles nur kommt dann im Ergebnis sowas hier bei rum:
842.160.354.444|01/Jan/2009:00:06:22|Zano|Zero|Join|SP
Das ist schon gar nicht schlecht nur wäre es schöner wenn ich die ip, datum usw in extra Variablen hätte. Oben habe ich das auch schon versucht nur ohne Erfolg.
Wenn ihr da eine Idee habt wäre ich sehr dankbar. Ich hoffe ich habe das hier ausreichend gut beschrieben, wenn noch Fragen offen sind bitte stellt sie und
ich versuche sie nach bestem Wissen zu beantworten.
Grüße
Maveric
Moin,
ich habe folgenden Sachverhalt. Ich soll ein Script schreiben, welches ein Logfile Zeilenweise durchsucht und per Regex bestimmte Inhalte filtert, das Ergebnis soll dann in eine Datenbank geschrieben werden. Ich bin schon sehr weit gekommen und habe über den iterativen weg mich einer schon brauchbaren Lösung angenähert.
Ich denke ich zeige zu erst einmal um welche Codestelle es geht..
...Variablendeklaration
...Regex
...Datenbankfunktion
while read line; do
tmp=$(echo $line | sed -rne "s/$regex/\1|\3|\5|\6|\7|\8/p")
ip=$1
date=$3
ck=$5
if [ -n "$ip" ]
then
insert $ip $date $ck
fi
done < $file
Mein Problem ist in dem ersten Zeile der while-Schleife, ich habe dort einen sed+Regex+group Audruck der auf jede Zeile des Logiles angewandt wird $line.
Das Ergebnis wird dann in tmp geschrieben. Ok das geht auch alles nur kommt dann im Ergebnis sowas hier bei rum:
842.160.354.444|01/Jan/2009:00:06:22|Zano|Zero|Join|SP
Das ist schon gar nicht schlecht nur wäre es schöner wenn ich die ip, datum usw in extra Variablen hätte. Oben habe ich das auch schon versucht nur ohne Erfolg.
Wenn ihr da eine Idee habt wäre ich sehr dankbar. Ich hoffe ich habe das hier ausreichend gut beschrieben, wenn noch Fragen offen sind bitte stellt sie und
ich versuche sie nach bestem Wissen zu beantworten.
Grüße
Maveric
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 180695
Url: https://administrator.de/contentid/180695
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Maveric,
wie sieht denn $regex aus? wenn ich das nicht weiß, kann ich es nicht ausprobieren. Und wie sehen denn die Zeilen in Deinem Logfile aus? kannst Du bitte mal ein Beispiel posten?
M.E. landen ip, datum usw. in verschiedenen Variablen, allerdings brauchst Du vielleicht eine formatierte Ausgabe.
Markus
wie sieht denn $regex aus? wenn ich das nicht weiß, kann ich es nicht ausprobieren. Und wie sehen denn die Zeilen in Deinem Logfile aus? kannst Du bitte mal ein Beispiel posten?
M.E. landen ip, datum usw. in verschiedenen Variablen, allerdings brauchst Du vielleicht eine formatierte Ausgabe.
Markus
Hallo nochmal,
ich bin kein Experte für sed und glaube, dass ich hier nicht weiter helfen kann.
Auf die Gefahr, dass ich mich hier unbeliebt mache gebe ich Dir einen Tipp. Bei linuxquestions.org in Unterforum "programming" http://www.linuxquestions.org/questions/programming-9/ wirst Du mit großer wahrscheinlichkeit schnell eine Lösung bekommen.
Allerdings solltest Du dort (zusätzlich zu Deinem Code) noch eine Zeile aus dem Logfile (Du kannst sie ja verfremden, so dass man es nicht mehr erkennt) posten.
Viel Erfolg
Markus
ich bin kein Experte für sed und glaube, dass ich hier nicht weiter helfen kann.
Auf die Gefahr, dass ich mich hier unbeliebt mache gebe ich Dir einen Tipp. Bei linuxquestions.org in Unterforum "programming" http://www.linuxquestions.org/questions/programming-9/ wirst Du mit großer wahrscheinlichkeit schnell eine Lösung bekommen.
Allerdings solltest Du dort (zusätzlich zu Deinem Code) noch eine Zeile aus dem Logfile (Du kannst sie ja verfremden, so dass man es nicht mehr erkennt) posten.
Viel Erfolg
Markus