2017-06-16 9 views
1

ファイルを読み込んで要素を配列に格納するシェルスクリプトを作成しました。Bashスクリプト - 配列から少数のアイテムを削除する

今、私は</を持つ配列からいくつかの要素を削除したいと思います。

私のxmlファイル:

<Execution_Stats> 
<Total_Executions>1</Total_Executions> 
<Total_Errors>0</Total_Errors> 
<SQL_Analysis> 
    <NOT_COMPARED>1</NOT_COMPARED> 
    <MATCHED>0</MATCHED> 
    <NOT_MATCHED>0</NOT_MATCHED> 
    <ERROR>0</ERROR> 
</SQL_Analysis> 
<Data_Analysis> 
    <NOT_COMPARED>0</NOT_COMPARED> 
    <MATCHED>0</MATCHED> 
    <NOT_MATCHED>1</NOT_MATCHED> 
    <ERROR>0</ERROR> 
</Data_Analysis> 
<Graph_Analysis> 
    <NOT_COMPARED>1</NOT_COMPARED> 
    <MATCHED>0</MATCHED> 
    <NOT_MATCHED>0</NOT_MATCHED> 
    <ERROR>0</ERROR> 
</Graph_Analysis> 
<Excel_Analysis> 
    <NOT_COMPARED>1</NOT_COMPARED> 
    <MATCHED>0</MATCHED> 
    <NOT_MATCHED>0</NOT_MATCHED> 
    <ERROR>0</ERROR> 
</Excel_Analysis> 
<Pdf_Analysis> 
    <NOT_COMPARED>1</NOT_COMPARED> 
    <MATCHED>0</MATCHED> 
    <NOT_MATCHED>0</NOT_MATCHED> 
    <ERROR>0</ERROR> 
</Pdf_Analysis> 
</Execution_Stats> 

シェルスクリプト:

#!/bin/bash 

txt=($(grep '_Analysis' "results.xml")) 

unset(txt[1]) 
unset(txt[3]) 
unset(txt[5]) 
unset(txt[7]) 
unset(txt[9]) 

が、私は予想通り、私は結果を取得しておりません。

私は

txt[0]=SQL_Analysis 
txt[1]=Data_Analysis 
txt[2]=Graph_Analysis 
txt[3]=Excel_Analysis 
txt[4]=PDF_Analysis 

のような出力を見たいけど

txt[0]=SQL_Analysis 
txt[1]= 
txt[2]=Data_Analysis 
txt[3]= 
txt[4]=Graph_Analysis 
txt[5]= 
txt[6]=Excel_Analysis 
txt[7]= 
txt[8]=PDF_Analysis 
txt[9]= 

または私はファイルから</で始まる任意のテキストを選択することができない方法があるかどうかを取得しますか?

+1

XMLを解析するXMLパーサを使用してください。 – miken32

+1

あなたは 'grep '<[A-Z]。* _ Analysis' results.xml'を試すことができます – janos

答えて

1

変数を設定解除する構文が間違っています。私はあなたのコードがどのように実行されているのかわからないので、私には構文エラーが発生します。 あなたのコード:

#!/bin/bash 

txt=($(grep '_Analysis' "test.xml")) 

unset(txt[1]) 
unset(txt[3]) 
unset(txt[5]) 
unset(txt[7]) 
unset(txt[9]) 

出力:

test.sh: line 5: syntax error near unexpected token `txt[1]' 
test.sh: line 5: `unset(txt[1])' 

以下を参照してください。

#!/bin/bash 

txt=($(grep '_Analysis' "test.xml")) 

unset 'txt[1]' 
unset 'txt[3]' 
unset 'txt[5]' 
unset 'txt[7]' 
unset 'txt[9]' 

for key in ${txt[@]}; do 
    echo $key 
done 

私を与える:

[email protected] [OPS]:~ > bash test.sh 
<SQL_Analysis> 
<Data_Analysis> 
<Graph_Analysis> 
<Excel_Analysis> 
<Pdf_Analysis> 
関連する問題