2016-07-19 36 views
1

Diese Frage wurde mehrmals gestellt, aber die Antworten sind alle GNU sed spezifisch.Wie BSD/OS X sed zu entfernen/löschen X Zeilen nach dem Spiel

sed -i '' "/${FIND}/,+2d" "$FILE"

Gibt eine "erwartete Kontextadresse" -Fehler.

Könnte mir bitte jemand ein Beispiel geben, wie BSD sed verwendet wird, um X-Zeilen einschließlich der Übereinstimmung und andere X-Zeilen ohne die Übereinstimmung zu löschen?

Antwort

1

Die folgenden sed Bearbeitung Skript (läuft mit -n) emuliert WHAT GNU sed/^pattern/,+2d tut:

/^pattern/{ 
    n 
    n 
    d 
} 

p 

Wenn /^pattern/ passend, wird es die nächsten zwei Zeilen von Eingang lesen, und dann alles verwerfen (Neustart der Zyklus). Wenn das Muster nicht übereinstimmt, wird die Zeile gedruckt.

2

Das Problem ist, dass dies einfach kein Job für sed ist, es ist ein Job für awk.

$ seq 5 | awk '/3/{c=2} !(c&&c--)' 
1 
2 
5 

setzen Sie die Variable c auf wie viele Zeilen, die Sie überspringen möchten.

Siehe auch https://stackoverflow.com/a/18409469/1745001.