O problema com o seu comando sed
$ sed '/^[a-z]\+=/,+0d' testfile.txt
é que o script sed é aplicado a todas as linhas dos dados de entrada.
O +0 (que é uma extensão do GNU) significa que seu script é equivalente a
$ sed '/^[a-z]\+=/d' testfile.txt
e a primeira e segunda linhas seriam excluídas, como você percebeu.
Por acaso, você obterá exatamente o mesmo efeito usando +1 , mas por outros motivos. O comando d , em vez de ser aplicado à linha um e dois individualmente, seria aplicado às duas primeiras linhas devido à correspondência na primeira linha (ou seja, o intervalo do comando d seria as linhas um e mais um +1 ). Isso não exclui a linha três porque está fora do intervalo.
A solução sed do GNU
$ sed '0,/^[a-z]\+=/{//d}' testfile.txt
que o usuário @Whitefield postou funciona e é bastante bom (embora a opção -r seja desnecessária e o% start 0 possa ser alterado para 1 neste caso, se você quiser ser mais POSIX-ish) .
Uma variante BSD sed da mesma abordagem seria parecida com
$ sed '1,/^[a-z]+=/{/^[a-z]+=/d
}' testfile.txt
Escapar de + é necessário apenas se o seu sed implementar "expressões regulares básicas obsoletas" em vez de "expressões regulares básicas modernas". Tanto o BSD sed quanto o GNU sed no meu sistema (Mac OS X) parecem ser do tipo "moderno". O POSIX não tem essa distinção e ler os manuais ( re_format(7) no BSD, que faz essa distinção) e a especificação POSIX lado a lado faz minha cabeça girar.