Supperputty XMLセッション構成ファイルからSSH構成ファイルを生成するスクリプトを作成しています。どのツールがよりよく処理するのかわかりません。私はawkを使って実装しようとしましたが、フィールドが同じではないため、期待した結果を受け取りませんでした。
入力ファイル:
<SessionData SessionId="DMZ contoso.prod.net" SessionName="amq01.contoso.prod.net" ImageKey="computer" Host="amq01.contoso.prod.net" Port="22" Proto="SSH" PuttySession="[webserver]-[EL]# PROD | xx" Username="user" ExtraArgs="" SPSLFileName="" />
<SessionData SessionId="Build und Deploy/[Websphere]-[IR]# Deploy" SessionName="[Websphere]-[Internal]# Deploy" ImageKey="computer" Host="deploy.contoso.prod.net" Port="22" Proto="SSH" PuttySession="[Websphere]-[internal]# Deploy" Username="usa" ExtraArgs="" SPSLFileName="" />
<SessionData SessionId="ImportedFromPuTTY/[DP]-[DMZ]# PROD | 01" SessionName="[DP]-[DMZ]# PROD | 01" Host="192.168.1.91" Port="2354" Proto="SSH" PuttySession="[DP]-[DMZ]# PROD | 01" Username="schnipi" SPSLFileName="" />
予想出力:
#short info
Host Hostfromfile
HostName amq01.contoso.prod.net
User user
Port 22
私はいくつかの方法を試しましたが、SessionIdは常に同じ場所に保持されるため、3番目の方法だけが機能します。
awk 'if ( $2 ~ /SessionId="/,/\/"/ ) {print "#Test "$2}
awk -F '="' '{print($2 == /SessionId/) "#Test " $2 ""}' session >> Test.conf
awk -F '="' '{print "#Description: " $2 "\n" }' session >> Test.conf
awk -F '="' '/SessionId=/ {for (a=1;a<=NF;++a) if ($a~/SessionId=/) print "# " $a "\n"} ' session >> config
引用符を出力せずに引用符間の一致のみを出力する方法がわかりません。
答え1
この試み、
IFS=$'\n'
for i in `cat file.xml`
do
echo "$i" | awk -F '"' '{print "#Discription: " $2 "\nHost internal\n HostName " $8"\n User " $16 "\n Port "$10 }'
done
私が得た結果は次のとおりです。
#Discription: DMZ contoso.prod.net
Host internal
HostName amq01.contoso.prod.net
User user
Port 22
#Discription: Build und Deploy/[Websphere]-[IR]# Deploy
Host internal
HostName deploy.contoso.prod.net
User web
Port 22