2017-06-16 65 views
1

我已經創建了shell腳本來讀取文件並將元素存儲到數組中。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> 

shell腳本:

#!/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>