127103

Logdateien bereinigen mit sed

Hallo.

Ich versuche log Dateien mittels sed Befehl zu bereinigen.
Ziel ist es erstmal alle Zeilen zu löschen in denen die Source IP mit 192 beginnt...

Soweit bin ich gekommen:

sed -i 's/srcip=192./d/' /home/user/2016-01-03.log  

Nun ersetzt sed den gesuchten String mit "d" face-sad
...ansich nicht ganz unlogisch, wenn ich die Schreibweise verändere kommt "nicht beendeter `s'-Befehl".

hab grad gelesen dass "-i" eine neue Zeile anfügt, brauch ich ja gar nicht oder?

Auf http://linuxint.com/DOCS/Linux_Docs/openbook_shell/shell_014_003.htm steht

Löscht alle Zeilen, welche das Muster »USA« enthalten:
you@host > sed '/USA/d' mrolympia.dat  

also meine Version:

sed '/srcip="192/d/' /home/user/2016-01-03.log  

Fehler: "sed: -e Ausdruck #1, Zeichen 14: Zusätzliche Zeichen nach dem Befehl"  

komm nicht weiter... Könnte mir einer nen Tipp geben bitte?

LG
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 296668

Url: https://administrator.de/forum/logdateien-bereinigen-mit-sed-296668.html

Ausgedruckt am: 06.05.2025 um 06:05 Uhr

127103
127103 19.02.2016 um 09:15:49 Uhr
Goto Top
Sorry
War ein "/" zuviel, aber sed löscht nicht... wird zwar viel ausgegeben aber die Datei bleibt unverändert

sed '/srcip="192/d' /home/user/2016-01-03.log   
114757
114757 19.02.2016 aktualisiert um 09:24:30 Uhr
Goto Top
Zitat von @127103:

Sorry
War ein "/" zuviel, aber sed löscht nicht... wird zwar viel ausgegeben aber die Datei bleibt unverändert

> sed '/srcip="192/d' /home/user/2016-01-03.log   
> 
Weil sed die Änderung standardmäßig nur auf der Konsole ausgibt.face-wink Du musst die Änderung schon in eine Datei umleiten ...
sed '/srcip="192/d' /home/user/2016-01-03.log  >/home/user/2016-01-03_neu.log  
Oder du nutzt den Parameter -i für ein Inplace-Replacement.
sed -i '' '/srcip="192/d' /home/user/2016-01-03.log  
Gruß jodel32
127103
127103 19.02.2016 um 09:31:14 Uhr
Goto Top
Kannst du mir erklären wieso der Behfehl hier funktioniert?

sed -i '/srcip="192./d' /home/user/2016-01-03.log  


i (für insert) Fügt eine neue Zeile vor der selektierten Zeile ein. & Jede Zeile mit "String" wird gelöscht... Im Ergebnis seh ich aber keine "neue zeile"

Danke Jodel dein Hinweis hilft mir mal wieder. Mal gucken ob ich's auch mit Negation hinkriege...
114757
114757 19.02.2016 aktualisiert um 09:37:16 Uhr
Goto Top
Zitat von @127103:

i (für insert) Fügt eine neue Zeile vor der selektierten Zeile ein. & Jede Zeile mit "String" wird gelöscht... Im Ergebnis seh ich aber keine "neue zeile"

Nein, -i macht was ganz anderes, wie ich geschrieben habe wird damit im File direkt ersetzt anstatt das Ergebnis nur auf der Konsole auszugeben:
https://robots.thoughtbot.com/sed-102-replace-in-place

Was willst du denn jetzt überhaupt erreichen/ändern ?? Das wird hier leider nicht ganz klar face-sad
127103
127103 19.02.2016 um 09:37:09 Uhr
Goto Top
Gut. 2 Quellen zwei Aussagen. Dachte "Galileo Openbook" ist ne valide Anlaufstelle...
114757
114757 19.02.2016 aktualisiert um 09:43:38 Uhr
Goto Top
Zitat von @127103:

Gut. 2 Quellen zwei Aussagen. Dachte "Galileo Openbook" ist ne valide Anlaufstelle...
Nee, du hast es nur anders interpretiert, und anstatt das i im Pattern zu setzen hast du es als Parameter (-i) missbraucht :-p
Schau mal genau hin:
http://www.grymoire.com/Unix/Sed.html#uh-41
127103
127103 19.02.2016 um 10:14:06 Uhr
Goto Top
i im Pattern? würde laut der website aber so "\i" aussehen.

Lesen und verstehen sind halt zwei paar Schuhe... also bei mir

So, kann jetzt mit
cat *.log > monat.log 
und
sed '/srcip="192.168.44./!d' /home/user/monat.log > /home/user/monat_vlan1_only.log  
meine log Datei von 3,6GiB auf 665MiB runterbrechen, das ist doch schonmal was...

geht wahrscheinlich zu weit, aber kann ich die "zu suchenden Strings" auch von ner Datei aus in den SED-Befehl pipen?
Lochkartenstanzer
Lochkartenstanzer 19.02.2016 aktualisiert um 10:37:48 Uhr
Goto Top
Moin,

Lesen von man-pages hilft ungemein:

man sed

SED(1)                                                   User Commands                                                   SED(1)

...

       -i[SUFFIX], --in-place[=SUFFIX]

              edit files in place (makes backup if extension supplied)

...

   Commands which accept address ranges
       {      Begin a block of commands (end with a }).

...

       d      Delete pattern space.  Start next cycle.

...

SEE ALSO
       awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, any of various books on sed, the sed FAQ (http://sed.sf.net/grab‐
       bag/tutorials/sedfaq.txt), http://sed.sf.net/grabbag/.

  ...

sed 4.2.1                                                December 2010                                                   SED(1)


Beachte: Wenn Du inplace ersetzen/löschen läßt, hast Du keine Datei für den fallback (wenn Du den suffix nicht angegeben hast). Von daher sollte man da ggf sed -e '/pattern/d' -ibak Originaldatei verwenden.

Beachte, daß das Pattern die ganze Zeile erfassen sollte, wenn Du die ganze Zeile löschen willst, wie z.B. "/^.*srcip=192\..*$/"

lks
114757
Lösung 114757 19.02.2016 aktualisiert um 12:50:36 Uhr
Goto Top
geht wahrscheinlich zu weit, aber kann ich die "zu suchenden Strings" auch von ner Datei aus in den SED-Befehl pipen?
Geht...
Textdatei (exclude.txt):
192\.168\.44\.|192\.168\.33\.|192\.168\.22\.
cat exclude.txt | xargs -I {} sed -re '/^.*srcip="({}).*$/!d' /home/user/monat.log  
127103
127103 19.02.2016 aktualisiert um 11:34:54 Uhr
Goto Top
upps... jetzt siehts aus wie bei Matrix. ⊙_ʘ

jetzt leite ich es auch mal in ne Datei um....
Lochkartenstanzer
Lochkartenstanzer 19.02.2016 um 11:34:28 Uhr
Goto Top
Zitat von @127103:

upps... jetzt siehts aus wie bei Matrix. ⊙_ʘ

picts please. face-smile
127103
127103 19.02.2016 um 12:36:24 Uhr
Goto Top
Sind leider sensible Daten. Einfach mal 4GB Text Datei auf Konsole ausgeben lassen. ʕʘ‿ʘʔ

So, das hat super geklappt jodel32, Danke.

Ich denke das ich mit dieser Systematik noch weitere Anpassungen an dem Logfile machen kann, so das es lesbar wird.

LG