0

まず、私はシェル、Java、Python、Perl、およびその他の Linux ベースのスクリプト言語に非常に慣れていません。比較的単純だと思うことをする必要がありますが、それを機能させることはできません。私は awk と xpath を使用しました (awk 出力の方が優れていますが、使いやすいとは思えません)。
まず、解析する必要がある .xml 出力を示します。

引用符

<CLIOutput>
   <Data>
     <Row>
     <Name>PROD3_A2_LUN10</Name>
     <Type>VMFS</Type>
     <Accessible>Yes</Accessible>
     <Hosts>esx01s112</Hosts>
   </Row>
   <Row>
     <Name>PRIVATE_VDI_SDLC3_A2_LUN174</Name>
     <Type>VMFS</Type>
     <Accessible>Yes</Accessible>
     <Hosts>esx02s104</Hosts>
   </Row>
   <Row>
     <Name>datastore1</Name>
     <Type>VMFS</Type>
     <Accessible>Yes</Accessible>
     <Hosts>esx01s100</Hosts>
   </Row>
 </data>
</CLIOutput>

理想的には、「名前、タイプ、アクセス可能、およびホスト」の XML 属性だけでなく、それらの内部でレポートして、必要な出力のみを送信できるようにしたいと考えています。つまり、すべての「名前」についてレポートしたいということです。 「ぴ」から始まります。これまでの私のコードの試みは次のとおりです。

* awk '$1~"^(" s ")$"{print $2}' RS=\< FS=\> s="Name" sdlcproxy1diff.xml -- shows me all "Name" items.| 
* xpath datastore.xml '/CLIOutput/Data/Row/*[self::Name]/text()' datastore.xml 2>/dev/null -- shows all "Name" items, but output is horrible.  

前もって感謝します!!

4

1 に答える 1

1

「xmlstarlet」と呼ばれる無料のアプリケーションを調べてみてください。グーグル。非常に強力ですが、構文を理解するのは少し難しい場合があります。できることの多くに加えて、XML ツリーからフィールドを取り出して 1 行に出力できるので、標準の Linux シェルスクリプトでそれらを sed/awk/grep できます。

例:

xmlstarlet sel -t -m /CLIOutput/data/Row -n -v "concat(Name,',',Type,',',Accessible,',',Hosts)"

これにより、XML の CSV 変換された出力が得られます。その段階で、パイプと「egrep」を使用して、名前が P で始まる行を見つけることができます。

grep -E '^P'

それが役立つことを願っています。

于 2012-08-13T19:58:41.717 に答える