Ich habe eine Protokolldatei mit Zeitstempeln. Gelegentlich befinden sich mehrere Zeitstempel in einer Zeile. Jetzt möchte ich alle Zeitstempel aus einer Zeile entfernen, aber den ersten behalten.
Ich kann s/pattern//2
aber das erst beim zweiten Auftreten beseitigen und sed
so etwas nicht zulassen s/pattern//2-
.
Irgendwelche Vorschläge?
Antworten:
Mit GNU
sed
:Das
2
gibt an, dass das zweite Muster und alle anderen entfernt werdeng
sollen. Das wird also der erste bleiben.quelle
Dies sollte funktionieren (ersetzen Sie _ durch etwas anderes, falls es mit Ihren Protokollen kollidiert):
quelle
\n
.oder ohne sed gehe zu:
Die generischen Lösungen zum Entfernen aus der n-ten Position (zum Beispiel 3) sind:
quelle
Eine geringfügige Änderung der Antwort von @ jillagre (aus Gründen der Robustheit modifiziert) könnte wie folgt aussehen:
... aber in einigen Fällen
sed
müssen Sie möglicherweisen
die rechte Seite der erstens///
Ubstitution-Anweisung durch ein wörtliches\n
ewline-Zeichen ersetzen.quelle