Você não precisa saber qual faixa aparece primeiro no arquivo. Você pode escrever o óbvio:
#/bin/sed -f
/begin1/,/end1/{
# commands specific to range 1
}
/begin2/,/end2/{
# commands specific to range 2
}
e isso vai funcionar.
Sed sempre faz uma única passagem através de suas entradas, lendo cada linha, processando-a através dos comandos que você deu, e depois escrevendo (ou não, conforme apropriado). Você pode provar isso executando sed em um pipeline (a entrada canalizada não é procurada, portanto a operação multi-pass não é possível).