我正在努力编写一个 shell 脚本。我有一堆 xml 文件,超过 500 个,其中一些没有结束标记。</deliveries>
我创建了一个可以工作的 shell 脚本,但只有当我在其中写入文件名时(我想我需要使用循环),有人能帮我看看我是否必须使用 foreach 或任何其他循环吗?我想要的是运行读取并更正文件夹中所有文件的脚本
这是我得到的:
<variable name="_" scope="session">some_Stuff","cause":"object type not supported"}</variable>
<variable name="out" scope="session">null</variable>
</delivery>
这就是我要的:
<variable name="_" scope="session">some_Stuff","cause":"object type not supported"}</variable>
<variable name="out" scope="session">null</variable>
</delivery>
</deliveries>
这是我正在使用的脚本:
#!/bin/bash
key_1=`awk '{line = $0} END {print line}' /home/tornasol/filename.xml` #here i read last line
key_2="</deliveries>"
if [[ "$key_1" != "$key_2" ]] #here I compare the last line and the string
then
sed -i -e '$a </deliveries>' /home/tornasol/filename.xml #here i add the string in
fi
答案1
灵感来自这个答案:
if ! xmlstarlet sel -Q -t -c "//deliveries" /home/tornasol/filename.xml 2>/dev/null; then
echo "</deliveries>" >>/home/tornasol/filename.xml
fi
这将检查是否xmlstarlet
返回错误,如果是,则将行添加到文件中。缺点是任何错误将导致添加标签。