Top-Themen

Aktuelle Themen (A bis Z)

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, 3364 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: 64748
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: 64748
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
Batch & Shell
SED Abfrageergebnis in Variable schreiben
gelöst Frage von BloodyRulzBatch & Shell4 Kommentare

Hallo, kann mir jemand sagen, wie ich eine SED Abfrage in eine Batchvariable schreibe. Ich möchte praktisch foglendes erreichen: ...

C und C++
CSharp - Textbox Inhalt beim Klick überprüfen und in eine Variable abspeichern
gelöst Frage von bf-7a7u7C und C++2 Kommentare

Hallo zusammen, ich habe leider keine Erfahrungen mit programmieren, aber es reizt mich es zu lernen. Aus mehreren Tutorials ...

Batch & Shell
Variablen Nutzen welche aus dem Inhalt von Variablen erstellt werden
gelöst Frage von der-blobBatch & Shell4 Kommentare

Hallo Zusammen, der Titel ist zwar nicht direkt aussage kräftig, aber jedoch weis ich nicht wie ich es beschreiben ...

Batch & Shell
For schleife mit variablem inhalt
gelöst Frage von Tealk144Batch & Shell5 Kommentare

Hallo zusammen, kann ich in einer Batch Datei folgendes schreiben? for Variable in Satz do ( if exist %buchstabe%: ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 10 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 14 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 14 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 17 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte14 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...