Проблема с вашей командой sed
$ sed '/^[a-z]\+=/,+0d' testfile.txt
является то, что сценарий sed применяется к каждой строке входных данных. 
+0 (который является расширением GNU) означает, что ваш скрипт эквивалентен
$ sed '/^[a-z]\+=/d' testfile.txt
и первая и вторая строки будут удалены, как вы заметили.
Кстати, вы получите точно такой же эффект, используя +1 , но по другим причинам.  Команда d вместо того, чтобы применяться к первой и второй строкам по отдельности, будет применена к первым двум строкам из-за совпадения в первой строке (то есть диапазон команды d будет равен строкам одна и еще одна, +1),  Это не удаляет третью строку, потому что это вне диапазона.
GNU sed решение
$ sed '0,/^[a-z]\+=/{//d}' testfile.txt
этот пользователь @Whitefield опубликовал работу и он довольно хорош (хотя опция -r не нужна, и начальный адрес 0 может быть изменен на 1 в этом случае, если вы хотите использовать больше POSIX-ish).
Вариант BSD sed того же подхода будет выглядеть
$ sed '1,/^[a-z]+=/{/^[a-z]+=/d
  }' testfile.txt
Экранирование + необходимо только в том случае, если ваш sed реализует "устаревшие базовые регулярные выражения", а не "современные базовые регулярные выражения".  Как BSD sed и GNU sed в моей системе (Mac OS X) выглядят как "современные". POSIX не имеет этого различия, и чтение руководств (re_format(7) для BSD, которое делает это различие) и спецификация POSIX бок о бок заставляют меня вертеть головой.