С sed это должно работать:
n=5
sed -ne "/\([^[:blank:]].*\)\{$n\}/!d;h;n;//!d;x;p;x;:1" -e 'p;n;b1'
awk -v n=$n '
!p {line = $0; gsub(/[[:space:]]/, "")}
!p && length($0) >= n && prev_is_long {p = 1; print prev}
!p {prev = line; prev_is_long = (length($0) >= n)}
p {print}
' file1
Я знаю, что Вы сказали, что sed (никакая предназначенная игра слов), но если можно жить с Perl, следующее, должен сделать то, что Вы хотите (n=20):
#!/usr/bin/perl -w
my $n=20; ## The minimum length of the line
my $prev=""; ## This holds the number of chars in the previous line
my $pline; ## This holds the previous line
my $pp=0; ## Counter, lines will be printed if set to 1
while(<>){
## Skip line processing if we have already
## found our lines of interest
$pp==1 && do {print; next};
## Get non-space chars
my $a=join("",/[^\s]+/g);
## Print if requirements are met.
if (length($prev)> $n && length($a)> $n){
print $pline,$_;
$pp=1;
}
$prev=$a;
$pline=$_;
}
Сохраните его как foo.pl и работайте как так:
$ perl foo.pl infile.txt