Regex bashshell中的条件查找/替换

Regex bashshell中的条件查找/替换,regex,xml,bash,shell,sed,Regex,Xml,Bash,Shell,Sed,我的问题应该很简单,我猜我失败的地方与语法有关。我希望编写一个简单的shell脚本,它以以下方式操作XML文件 每个标记内的数据点将是数值。这些都应该是正值,因此如果XML文件中的任何标记中存在负值,我想将其替换为零。例如,下面的XML文件-称之为“file.XML” 19 2. -12 37 -41 应替换为 <tag1>19</tag1> <tag2>2</tag2> <tag3>0</tag3> <tag4&g

我的问题应该很简单,我猜我失败的地方与语法有关。我希望编写一个简单的shell脚本,它以以下方式操作XML文件

每个标记内的数据点将是数值。这些都应该是正值,因此如果XML文件中的任何标记中存在负值,我想将其替换为零。例如,下面的XML文件-称之为“file.XML”

19
2.
-12
37
-41
应替换为

<tag1>19</tag1>
<tag2>2</tag2>
<tag3>0</tag3>
<tag4>37</tag4>
<tag5>0</tag5>     
19
2.
0
37
0
我的想法是,如果我将字符串“>-*-*-*-*的任何实例变灰,请尝试以下操作:

STRING=">-.*<"
STRING=“>-.*-[0-9]*试试这个:

STRING=">-.*<"
STRING=“>-.*-[0-9]*
检查新文件

cat a2.txt
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>0</tag3>
<tag4>37</tag4>
<tag5>0</tag5>
cat a2.txt
19
2.
0
37
0
检查新文件

cat a2.txt
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>0</tag3>
<tag4>37</tag4>
<tag5>0</tag5>
cat a2.txt
19
2.
0
37
0
>-[0-9]+<
是更好的选择,因为它是一个或多个字符+<

是一个更好的选择,因为它是一个或多个字符

谢谢@jomuel的回复。你很正确。“-xq”选项也把我搞砸了。我用“-q”替换了它,效果很好。我现在接受你的回答,再次感谢你的帮助。谢谢@jomuel的回复。你很正确。“-xq”选项“这个选择也把我搞砸了。我用“-q”替换了这个,效果很好。我现在接受你的回答,再次感谢你的帮助。谢谢@bobo的回复。是的,那肯定行。我的代码现在运行良好。再次感谢您花时间回复。感谢@bobo的回复。是的,那肯定行。我的代码现在运行良好。再次感谢您花时间回复。是否存在>-.*<可能失败的实例?是的,如果您的文件中包含以破折号开头的任何其他xml。当然。在这个特殊的例子中,xml文件中只会有数值,所以我应该是安全的,但要注意这一点。谢谢有没有>-.*<可能失败的实例?是的,如果文件中包含以破折号开头的任何其他xml。当然。在这个特殊的例子中,xml文件中只会有数值,所以我应该是安全的,但要注意这一点。谢谢
cat aaa.txt
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>-12</tag3>
<tag4>37</tag4>
<tag5>-41</tag5>
sed 's/-[0-9][0-9]*/0/' aaa.txt > a2.txt
cat a2.txt
<tag1>19</tag1>
<tag2>2</tag2>
<tag3>0</tag3>
<tag4>37</tag4>
<tag5>0</tag5>
>-[0-9]+<