【发布时间】:2016-04-21 04:15:10
【问题描述】:
我的问题应该很简单,我猜我失败的地方与语法有关。我正在寻找一个简单的 shell 脚本,它以下列方式操作 XML 文件。
每个标签内的数据点都是数值。这些都应该是正数,所以如果 XML 文件中的任何标记内都存在负值,我想用零替换它。例如,以下 XML 文件 - 称之为“file.xml”
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>-12</tag3>
<tag4>37</tag4>
<tag5>-41</tag5>
应该替换为
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>0</tag3>
<tag4>37</tag4>
<tag5>0</tag5>
我对此的想法是,如果我在文件中 grepped 字符串 ">-*0
#!/bin/bash
STRING=">-*<"
if grep -xq "$STRING" file.xml
then
sed -i 's/$STRING/>0</g' file.xml
else
echo "that string was not found in the file"
fi
但是,我得到的只是返回的回显字符串“在文件中找不到该字符串”,即使我在文件中包含了负值。在本例中,* 是否不考虑减号后面的任何字符串?当然,减号后面可以有任何数字,所以我认为我的问题是我如何定义变量:STRING=">-*
【问题讨论】: