Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Sed Group Inhalt als Variable abspeichern

Frage Linux

Mitglied: Maveric

Maveric (Level 1) - Jetzt verbinden

17.02.2012 um 14:25 Uhr, 3331 Aufrufe, 4 Kommentare

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

01.
 
02.
while read line; do 
03.
        tmp=$(echo $line | sed -rne "s/$regex/\1|\3|\5|\6|\7|\8/p") 
04.
        ip=$1 
05.
        date=$3 
06.
        ck=$5 
07.
  
08.
if [ -n "$ip" ] 
09.
        then 
10.
                insert $ip $date $ck 
11.
        fi 
12.
done < $file 
13.
 
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
Mitglied: hmarkus
17.02.2012 um 15:35 Uhr
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
Bitte warten ..
Mitglied: Maveric
17.02.2012 um 16:21 Uhr
Ein Auszug kann ich dir leider nicht geben, da ich glaube das das nicht so gut kommt bei meinem Arbeitgeber. Aber ich kann dir weiter Informationen geben die dir sicher helfen.

01.
ip=$(echo $line | sed -rne "s/$regex/\1/p") 
02.
date=$(echo $line | sed -rne "s/$regex/\3/p") 
03.
blub=$(echo $line | sed -rne "s/$regex/\5|\6|\7|\8/p")
Das würde genau das machen was ich will. Mit dem Nachteil das der Ausdruck insgesamt 3 mal Pro Zeile im Logfile ausgeführt werden würde. Das ist nicht so performant wie ich es brauche. Da das File gut 0,5Millionen Einträge hat.

Der Regex ausdruck an sich bearbeitet Logfiles, die ohne Punkt und Komma durchgeschrieben wurde und extrahiert daraus mehrere Abschnitte(Gruppen). Dabei packe ich auch den Müll an der Stelle wo er auftritt in eine Grupp. Beispiel:

(IP)(MÜLLLLLL)(Datum)(User1)(Zone)(Mehr Müll)(usw)

In der Reihenfolge baut sed dann auch die Gruppen auf 1=IP 2=Müll usw. Sprich so wie oben kann ich also wenn ich den Befehl öfter ausführe die Daten einzeln extrahieren. Ich suche einen weg wie ich es im Anfangspost hatte mit einem Aufruf und der Extraktion der Gruppen im Nachhinein. Unter Java geht das reibungslos.
Bitte warten ..
Mitglied: hmarkus
17.02.2012 um 16:33 Uhr
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
Bitte warten ..
Mitglied: Maveric
19.09.2012 um 12:51 Uhr
Ich habe das Problem schon eine Weile gelöst und daher hier noch kurz ein Nachtrag. Ich habe ein Perl Script geschrieben, was Zeilenweise die Datei einliest, dann einen Regex drüber laufen lässt, der durch Gruppierung es möglich macht, einzelne Teilergebnisse ab zu greifen. Dann werden diese nach den eigenen Wünschen sortiert und in eine DB geschrieben. Hier mal ein kleiner Ausschnitt aus der Script:

01.
open(MYINPUTFILE, "<$file"); 
02.
while(<MYINPUTFILE>){ 
03.
 
04.
 $line = $_; 
05.
 $line =~ m/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(.*\[)([0-9]+\/\w+\/[0-9]+\:[0-9]+\:[0-9]+\:[0-9]+)(.*)([X][X][=](([Y][0-9]*)(([Z][0-9]*)*)((([P][0-9]*\-[0-9]*)*)*))([X][Y][0-9]*[Z][Z][0-9]*)*)(.*)/g; 
06.
  
07.
...mehr Code... 
08.
 
09.
$dbh->do("INSERT INTO Datenbankname (Feld 1,Feld 2,Feld 3,Feld 4,Feld 5,Feld 6,Feld 7,Feld 8) VALUES('$1','$3','$6','$7','$8','$10','$sortMan','$sortProp')"); 
10.
 
11.
}
Die Gruppen ergeben sich aus den Ergebnissen der Klammern z.b. "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)" hier gleich $1 usw.
Wenn fragen dazu aufkommen gerne per PM, bin ja jetzt Pro ;D.
Bitte warten ..
Ähnliche Inhalte
VB for Applications
gelöst Bestimmtes Arrayfeld mit Variable aufrufen? - VBS (10)

Frage von gabrixl zum Thema VB for Applications ...

Batch & Shell
gelöst Laufwerksbezeichnung (label) in Batch als Variable nutzen (21)

Frage von tobias.mock zum Thema Batch & Shell ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (41)

Frage von sabines zum Thema Internet ...

Netzwerke
Wie erstelle ich ein Intranet (19)

Frage von Leonardnet zum Thema Netzwerke ...

Netzwerke
VPN-Server einrichten PPTPD-Einrichtung gescheitert (15)

Frage von MIlexx zum Thema Netzwerke ...

LAN, WAN, Wireless
gelöst Eintägige Netzwerkunterbrechung trotz Backupleitung (15)

Frage von iAmbricksta zum Thema LAN, WAN, Wireless ...