Para o primeiro startStr … endStr , contém /bbb/ ocorrência:
sed -n '/startStr/ {:n; N; /endStr/ {/\n[^\n]*bbb[^\n]*\n/ {p; q}; b}; bn}'
ou
sed -n '/startStr/ {:n; N; /endStr/ {/\nbbb\n/ {p; q}; b}; bn}'
if bbb não é uma expressão regular e é exatamente uma string que você precisa (do começo ao \n ).
Explicação
Para o endereço /startStr/ we:
- definir rótulo
:n; - leia a próxima linha com
N; - verifique se corresponde a
/endStr/;- se for verdade, verifique
/\nbbb\n/ocorrência neste bloco que lemos;- se estiver presente, faça
{p; q}para «imprimir e sair», - caso contrário, faça
bpara «lançar este bloco e começar a procurar na próxima»;
- se estiver presente, faça
- se for verdade, verifique
- se não for o fim do bloco, passamos para
:n, ou seja, continuamos lendo.