Supperputty XMLファイルからSSHホスト構成ファイルを生成する

Supperputty XMLファイルからSSHホスト構成ファイルを生成する

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

おすすめ記事