Это метод двойного прохода:
awk '(NR==FNR) { if(NF) {t=FNR;if(!h) h=FNR}; next}
(h<FNR && FNR<t)' file file
Целые числа h
и t
отслеживают голову и хвост. В этом случае пустые строки также могут содержать пробелы. Вы могли бы заменить if(NF)
на if(length($0)==0)
, чтобы быть более строгим.
Этот читает все в память и делает простую замену в конце:
$ awk '{b=b RS $0}
END{ sub(/^[[:blank:]\n]*[^\n]+\n/,"",b);
sub(/\n[^\n]+[[:blank:]\n]*$,"",b);
print b }' file