Existem vários problemas aqui (além do geral de tentar analisar dados estruturados com ferramentas de expressão regular)
-
se o seu padrão (ou substituição) contém barras, então você precisa usar um separador diferente para os comandos sed ou escapar das barras
-
sed é (normalmente) orientado a linhas, portanto você não pode cruzar os limites de linha a menos que você atraia linhas adicionais para o espaço de padrão com
N
-
correspondência de quantidades específicas de espaço em branco tornará a coisa toda ainda mais frágil
Por exemplo, você poderia fazer:
sed '/<key>second<\/key>/ {N; s/\n[[:blank:]]*<array>/&\n\tinsert-me/;}' test.txt
ou (mais naturalmente) usando a ppend em vez de s ubstitute
sed -e '/<key>second<\/key>/ {N; /<array>/ a\tinsert-me' -e ';}' test.txt
<record>
<key>first</key>
<array>
--I want to insert the line here--
<string>hello</string>
<string>world</string>
</array>
</record>
<record>
<key>second</key>
<array>
insert-me
<string>its</string>
<string>me</string>
<string>again</string>
<string>hello</string>
<string>world</string>
<string>again</string>
</array>
</record>