我的问题应该相当简单,我猜我失败的地方在于语法相关。我正在寻找编写一个简单的shell脚本,它通过以下方式操作XML文件。bash shell中的条件查找/替换
每个标签内的数据点将是数值。这些都应该是正面的,所以如果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字符串的任何实例“> - * <“,并使用sed将其替换为> 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 =“> - * <”.... 任何指针在正确的方向将不胜感激。提前致谢。
感谢@jomuel的回应。你在现场。 “-xq”选项也搅乱了我。我用“-q”代替了它,它工作正常。我现在接受你的回答,并再次感谢你的帮助。 – tasslebear