Я не очень хорош в sed, но вот как я это сделаю в awk:
awk 'prev != "" && /PATTERN/ { print "" } { prev = $0; print }' file
Если prev
(предыдущая строка) не пуста, а текущая строка соответствует /PATTERN/
, выведите пустую строку. Безоговорочно сохраните текущую строку для сравнения со следующей, и print
текущую строку.
Чтобы выполнить редактирование на месте (например, sed -i
), просто перенаправьте команду во временный файл, а затем перезапишите оригинал:
awk 'prev != "" && /PATTERN/ { print "" } { prev = $0; print }' file > tmp && mv tmp file
Обратите внимание, что, поскольку prev
изначально не установлен, этот не будет печатать новую строку в начале вывода, даже если первая строка соответствует /PATTERN/
. Чтобы обойти это, вы можете изменить условие на:
(NR == 1 || prev != "") && /PATTERN/
Вы также можете выполнить редактирование на месте с помощью GNU awk, используя опцию -i inplace
.