【发布时间】:2015-03-05 16:12:06
【问题描述】:
我想编辑 XML 文件中的一些行。这些行一开始看起来都是一样的,它们只是在其他一些独特行之后的块的一部分,例如:
First_Object
... some number of lines
<STATUS>true</STATUS>
... some number of lines
Second_Object
... some number of lines
<STATUS>true</STATUS>
... some number of lines
Third_Object
... some number of lines
<STATUS>true</STATUS>
... some number of lines
因此,对于 First_Object、Second_Object、Third-Object 等中的每一个,我需要获取 true 的实际行号,以便可以将该值更改为其他值。
我从“grep First_Object -A 100 filename | grep -n '[STATUS]'”开始(在这个站点上必须使用方括号而不是角度),但这给了我 First_Object 之后的行数,而不是行有问题的号码。我知道我可以将两者加在一起,但这似乎很混乱......必须有一种方法可以在字符串 'First_Object' 或类似的东西之后获得“字符串 '[STATUS]' 的第一次出现。
谢谢!
【问题讨论】:
-
这几乎肯定是处理 XML 数据的错误方法。你能提供更多关于它的结构方式和选择标准的信息吗?有专门的 XML 处理工具更适合这种处理。
-
XML 是一个 STIG 清单,并且由于没有适用于 OS X 的 SCAP 内容,我正在尽可能多地编写脚本。还没有工具可以满足我的需要。
-
不需要工具来处理您正在处理的 XML 派生格式的特殊风格;在基本层面上,它仍然是 XML。如果要替换属于特定节点的
STATUS节点,方法是通过XPath 选择它并使用xmlstarlet之类的工具对其进行修改。如果我对您的 XML 的外观有更多了解,我可以向您展示。