Ein Nachteil des Einzeilers ist aber, dass er alle Zeilen mitnimmt, auch wenn sie nicht mit 0.0.0.0 anfangen.
Dann hast Du schon da etwas falsch gemacht. Man kann halt schlecht selbst testen ... woher kommt denn das File?
Ich habe jetzt eine Art Blacklist vorangestellt, gibt es auch eine Möglichkeit, nur eben die auszugeben, die dem pattern entsprechen? (quasi Whitelist)
Das ist die eigentliche Idee am "-n" beim Aufruf ... da hast Du bei einem Fehler im Pattern nicht nach diesem gesucht, sondern einen (falschen/unnötigen) Workaround versucht.
Auch löscht
auf meinem Linux System die Leerzeilen aber nicht auf der Fritzbox?!?
Das ist eben alles aus der Busybox und immer ein klein wenig anders. Da muß man eben ein wenig probieren, das sed der Busybox mag auch keine "extended regular expressions" (\s gehört dazu). Das ließe sich sicherlich z.B. mit einem
lösen, wenn da nicht sehr komische "white spaces" drin stehen.
Ein anderes Problem sind allerdings Zeilen, die z.B. so sind:
Code:
0.0.0.0 stat.active24stats.nl #[Tracking.Cookie]
Dafür dienen ja die "capture groups" im Kommando (das sind die Gruppen in den "escaped parenthesis") ... wenn Du in der Maske das entsprechend "hinten kürzt" (z.B. nur alle Zeichen ungleich "blank" und "tab" dort einbeziehst anstelle von "."), kannst Du die erste Capture-Group (\1 in der Ersetzung) gleich so gestalten, daß der Teil ab der Raute gar nicht mehr auftaucht. Deine "Filter" als "Blacklist" für die Eingabedatei sind ohnehin unnötig (s.o.).
Allerdings solltest Du das eben (mit "normaler regex-Syntax") direkt auf der Box (oder unter einem anderen Linux dann eben auch mit der Busybox und den dort enthaltenen Applets) testen ... wie geschrieben, wenn Du nicht wirklich weitere Verarbeitungen vornehmen willst, reicht
ein einziger sed-Aufruf vollkommen aus. Ggf. mit mehreren Kommandos, wobei ich Dir da auch eher zu mehrfacher Angabe von -e raten würde als zum Semikolon - das ist immer etwas unübersichtlicher und es hat sich eigentlich - eben weil es geht und keinen Unterschied macht - eingebürgert,
unabhängige Kommandos jeweils gesondert nach einem -e zu verwenden. Bei Abhängigkeiten (z.B. beim Arbeiten mit dem "hold space") geht das natürlich nicht ... aber das Aufteilen unabhängiger Kommandos verdeutlicht auch noch einmal das sed-Prinzip, daß ein solches Kommando immer auf den gesamten Stream angewendet wird und solche Sachen wie "+1,3s/a/b/g", die auf einem "current line pointer" basieren, mit sed eben nicht funktionieren.
EDIT: Jetzt habe ich den "Fehler" im ersten Kommando in #7 auch gesehen ... wenn Du bei "s|\r||p" das "p" hinter dem Kommando angibst, wird eben jede Zeile ausgegeben, die ein \r enthielt und wo das gelöscht wurde. Du darfst Dir die Arbeit mit dem sed nicht wie mit einem "normalen Editor" vorstellen, wo Du alles löschen mußt aus der Eingabedatei, was Du nicht haben willst (zumindest nicht hier in Deinem Falle). Wenn Du beim "s" die richtige Maske (Pattern) verwendest, brauchst Du nicht ein einziges "d"-Kommando, weil nur die Zeilen, die auf das "s"-Kommando mit dem "p" am Ende "matchen", überhaupt in der Ausgabe landen.
EDIT2: Offenbar sind ja in der Eingabe die Zeilen mit CR/LF getrennt, damit sind "white spaces" natürlich auf "blank", "tab" und "cr" zu erweitern.