Você está próximo, eu acho - o seu principal problema é que $(cat file2)
será tratado como literal entre aspas simples - você deve estar usando o comando r
embutido:
r filename
Fila o conteúdo do nome do arquivo a ser lido e inserido na saída fluxo no final do ciclo atual, ou quando a próxima linha de entrada é ler. Note que se filename não puder ser lido, ele será tratado como se eram um arquivo vazio, sem qualquer indicação de erro.
Então:
sed '
/foo/{
:a
N
/\nbar$/!ba
r file2
d
}
' file1
Se você quiser discutir isso em uma linha única, há um truque que você precisará evitar que o sed trate tudo depois do r
como parte do nome do arquivo:
sed -e '/foo/{:a; N; /\nbar$/!ba; r file2' -e 'd;}' file1