127103
Feb 19, 2016, updated at 11:50:36 (UTC)
2849
12
0
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 296668
Url: https://administrator.de/contentid/296668
Printed on: April 26, 2024 at 07:04 o'clock
12 Comments
Latest comment
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. Du musst die Änderung schon in eine Datei umleiten ...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