该文件的名称是 types.xml,列出了数百个不同的项目。
这是它的样子:
<type name="CanisterGasoline">
<nominal>50</nominal>
<lifetime>28800</lifetime>
<restock>0</restock>
<min>30</min>
<quantmin>-1</quantmin>
<quantmax>-1</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="tools"/>
<tag name="shelves"/>
<usage name="Industrial"/>
</type>
<type name="Canteen">
<nominal>20</nominal>
<lifetime>14400</lifetime>
<restock>0</restock>
<min>10</min>
<quantmin>10</quantmin>
<quantmax>90</quantmax>
<cost>100</cost>
<flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
<category name="food"/>
<usage name="Military"/>
</type>
基本上,无论它说<nominal>20</nominal>
什么,我都想将介于<nominal>
和之间的数字更改</nominal>
为 0。
感谢您抽出宝贵的时间!
如果你想这样做,
sed
你可以这样做:替换
<nominal>
后跟任何数字序列,后跟</nominal>
with<nominal>0</nominal>
。但我相信很快就会有人提出建议您为什么应该使用专用的 XML 解析器来执行此操作,并建议使用哪一种以及如何使用。
假设 XML 文档格式正确(您的示例缺少根节点),如果节点的值为 20,您可以使用
xmlstarlet
将任何 -node 的值替换为零,如下所示:nominal
ed
这通过更新 ( )输入文档 ( ) 中任何位置的值为 20 ( ) 的-u
所有节点来编辑 ( ) 数据,将节点的值设置为零 ( )。nominal
//nominal
[text() = 20]
-v 0
将根节点添加到示例文档并运行它会导致
您甚至可以使用
xmlstarlet
文档中的其他值更新该值,例如父节点的restock
值:如果您在命令行之后立即为其提供或选项,该
xmlstarlet
实用程序可以进行就地编辑。-L
--inplace
ed
或使用
regex
“反向引用”之类的