Com o bom e velho ed
:
ed -s client-template.ovpn <<\IN
/ca ca.crt/s//<ca>\
<\/ca>/
- r ca.crt
/cert client.crt/s//<cert>\
<\/cert>/
- r client.crt
/key client.key/s//<key>\
<\/key>/
- r client.key
,p
q
IN
isso muda uma linha como
tag tag.extension
para
<tag>
</tag>
e, em seguida, r
está no conteúdo de tag.extension
antes ( -
) da linha de marcação de fechamento (ou seja, a linha atual após a substituição). Substitua ,p
por w
para realmente gravar as alterações no arquivo de modelo (ou use w somefile
para salvar as alterações em outro arquivo). Tenha em mente que ed
terá erro se um padrão não for encontrado.
Com sed
você pode combinar r
com a
( a
, como r
, não opera no espaço padrão - ao contrário de s
, o que faz):
sed '
/ca ca.crt/{
s//<ca>/
r ca.crt
a\
</ca>
}
/cert client.crt/{
s//<cert>/
r client.crt
a\
</cert>
}
/key client.key/{
s//<key>/
r client.key
a\
</key>
}
' client-template.ovpn