
127103
19.02.2016, aktualisiert um 12:50:36 Uhr
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:
Nun ersetzt sed den gesuchten String mit "d"
...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
komm nicht weiter... Könnte mir einer nen Tipp geben bitte?
LG
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"
...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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 296668
Url: https://administrator.de/forum/logdateien-bereinigen-mit-sed-296668.html
Ausgedruckt am: 06.05.2025 um 06:05 Uhr
12 Kommentare
Neuester Kommentar

Zitat von @127103:
Sorry
War ein "/" zuviel, aber sed löscht nicht... wird zwar viel ausgegeben aber die Datei bleibt unverändert
Weil sed die Änderung standardmäßig nur auf der Konsole ausgibt.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
>
sed '/srcip="192/d' /home/user/2016-01-03.log >/home/user/2016-01-03_neu.log
sed -i '' '/srcip="192/d' /home/user/2016-01-03.log

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"
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

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 :-pGut. 2 Quellen zwei Aussagen. Dachte "Galileo Openbook" ist ne valide Anlaufstelle...
Schau mal genau hin:
http://www.grymoire.com/Unix/Sed.html#uh-41
Moin,
Lesen von man-pages hilft ungemein:
man sed
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
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

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