VPN証明書を1つのファイルにまとめたいです。以下はテンプレートファイルです。
# some unrelated stuff
ca ca.crt
# other unrelated stuff
私はその行を次のように変更したいと思いますca ca.crt
:
<ca>
# ca.crt contents
</ca>
私は次のスクリプトを試しました。
cat client-template.ovpn |
sed -e 's/ca ca.crt/<ca>\n<\/ca>/' |
sed -e '/<ca>/r ca.crt'
このスクリプトはうまく機能しますが、2つの異なるファイルをandと貼り付ける必要がありますca.crt
。s
r
私はこれを使用していますが、sed
他のUnixツールへの答えは大歓迎です。
ベストアンサー1
グッドオールドと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
これにより、1行が変更されます。
tag tag.extension
到着
<tag>
</tag>
次に、()終了バーの前(つまり、交換後の現在の行)の内容を作成しますr
。実際、変更をテンプレートファイルに書き込むことで置き換えられます(または変更を別のファイルに保存するため)。パターンが見つからないとエラーが発生しますのでご注意ください。tag.extension
-
,p
w
w somefile
ed
これを次のように組み合わせることができます(似ていますが、パターン空間では機能しません。 - これとは異なります)sed
。r
a
a
r
s
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