O comando sed
"i" espera \
seguido por texto, conforme explicado na saída de BSD sed
quando recebe o comando fornecido acima.
No entanto, espera apenas uma linha de texto. Para inserir mais do que isso, você precisa incluir uma barra invertida no final da primeira linha:
sed "1i\
$(head -n 2 source.xml | sed 's/$/\/')
" sample.xml
Isso (aninhadas sed
chamadas) fica um pouco ridículo. Como escrevi sobre em outro lugar , a ferramenta escolhida para edições de arquivos com scripts in-loco não é sed
, mas ex
:
ex -sc '1,2ya | n! | 0pu | x' source.xml sample.xml
O sinalizador -s
inicia ex
no modo silencioso, para processamento em lote. -c
especifica o comando a ser executado.
1,2ya
yanks (ou seja, cópias) as duas primeiras linhas do primeiro arquivo, source.xml
.
|
é o separador de comandos.
n!
vai para o próximo arquivo, descartando as alterações feitas no arquivo atual. (Nós não fizemos nenhum neste caso, então n
funcionaria tão bem).
0pu
"puts" (ou seja, pastas) as linhas que copiamos anteriormente, colocando-as logo após a linha "0" (ou seja, colando-as acima da primeira linha).
x
exits, salvando as alterações feitas no arquivo atual.
Ao contrário de sed -i
, que não é especificado em POSIX (e que não funciona no BSD sed
, que requer que uma extensão de arquivo de backup receba a opção -i
, mesmo se vazia), o comando ex
acima é totalmente compatível com POSIX .