127103
Goto Top

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

Content-Key: 296668

Url: https://administrator.de/contentid/296668

Printed on: April 26, 2024 at 07:04 o'clock

Mitglied: 127103
127103 Feb 19, 2016 at 08:15:49 (UTC)
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   
Mitglied: 114757
114757 Feb 19, 2016 updated at 08:24:30 (UTC)
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
Mitglied: 127103
127103 Feb 19, 2016 at 08:31:14 (UTC)
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...
Mitglied: 114757
114757 Feb 19, 2016 updated at 08:37:16 (UTC)
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
Mitglied: 127103
127103 Feb 19, 2016 at 08:37:09 (UTC)
Goto Top
Gut. 2 Quellen zwei Aussagen. Dachte "Galileo Openbook" ist ne valide Anlaufstelle...
Mitglied: 114757
114757 Feb 19, 2016 updated at 08:43:38 (UTC)
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
Mitglied: 127103
127103 Feb 19, 2016 at 09:14:06 (UTC)
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?
Member: Lochkartenstanzer
Lochkartenstanzer Feb 19, 2016 updated at 09:37:48 (UTC)
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
Mitglied: 114757
Solution 114757 Feb 19, 2016 updated at 11:50:36 (UTC)
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  
Mitglied: 127103
127103 Feb 19, 2016 updated at 10:34:54 (UTC)
Goto Top
upps... jetzt siehts aus wie bei Matrix. ⊙_ʘ

jetzt leite ich es auch mal in ne Datei um....
Member: Lochkartenstanzer
Lochkartenstanzer Feb 19, 2016 at 10:34:28 (UTC)
Goto Top
Zitat von @127103:

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

picts please. face-smile
Mitglied: 127103
127103 Feb 19, 2016 at 11:36:24 (UTC)
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