Серьезно, не забудьте использовать sed для чего-либо, кроме s / old / new в отдельных строках.Для всего остального решение awk всегда будет представлять собой некоторую комбинацию более понятного, более простого, более эффективного, более легкого в совершенствовании / обслуживании и более портативного, чем решение sed для той же задачи.
Это просто основано на мой предыдущий сценарий awk :
$ cat tst.awk
BEGIN { badLineNrs[5]; badLineNrs[6] }
{ rec[++numLines] = $0 }
/{content-end}/ {
for (lineNr=1; lineNr<=numLines; lineNr++) {
if ( !(lineNr in badLineNrs) ) {
print rec[lineNr]
}
}
delete rec
numLines = 0
}
$ awk -f tst.awk file
{content-start}
first1
second1
third1
sixth1
{content-end}
{content-start}
first2
second2
third2
sixth2
{content-end}
{content-start}
first3
second3
third3
sixth3
{content-end}
или, если вам нравится краткий и загадочный текст, это также даст ожидаемый результат при использовании любого awk, но сложнее построить и делать такие вещи, как печать или пропуск определенных записей(как в вашем предыдущем вопросе ), поэтому, кроме переносимости, он не намного лучше, чем эквивалентное решение sed:
$ awk '(NR-5)%8 && (NR-6)%8' file
{content-start}
first1
second1
third1
sixth1
{content-end}
{content-start}
first2
second2
third2
sixth2
{content-end}
{content-start}
first3
second3
third3
sixth3
{content-end}