Bash脚本 - 从数组中删除一些项目

时间:2017-06-16 15:52:07

标签: xml bash shell unix

我创建了shell脚本来读取文件并将元素存储到数组中。

现在我想从数组中删除一些元素,其中包含</

我的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 个答案:

答案 0 :(得分: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

这给了我:

dumbledore@ansible1a [OPS]:~ > bash test.sh
<SQL_Analysis>
<Data_Analysis>
<Graph_Analysis>
<Excel_Analysis>
<Pdf_Analysis>