OK, isso não é XML inserido em XML como eu pensava - se fosse, a resposta seria 'use um analisador'. No entanto, não é, você está apenas mesclando um arquivo de texto em outro.
Então, eu quebraria o perl
como muitas vezes faço:
#!/usr/bin/env perl
use strict;
use warnings;
open ( my $insert, '<', '~/tmp/test.xml' ) or die $!;
open ( my $modify, '<', '/data/myuser/.mycontent/mytest.xml' ) or die $!;
open ( my $output, '>', '/data/myuser/.mycontent/mytest.xml.new' ) or die $!;
select $output;
while ( <$modify> ) {
if ( $. == 32 ) { print <$insert>; };
print;
}
Isso deve fazer o truque - se você está atrás de um forro, então pode ser resumido em:
perl -p -i.bak -e 'BEGIN { open ( $insert, "<", shift ) } if ( $. == 32 ) { print <$insert> }' ~/tmp/test.xml /data/myuser/.mycontent/mytest.xml
Observe que $.
é perl
para "número da linha atual". Você pode aplicar um tipo diferente de condicional, se preferir. Como se um regex corresponde (o que pode ser mais apropriado, dado arquivos de configuração tendem a receber linhas inseridas neles).