【发布时间】:2020-07-06 09:50:29
【问题描述】:
如何使用sed(或其他简单方法)提取下例中CDATA之间的内容?
棘手的是模式必须在多行上进行评估,并且行的一部分必须保留在提取的结果中......所以我希望像sed或awk这样的强大工具能够使用捕获正则表达式提取文件的内容..没有成功!
内容示例:
<XmlBox className="com.example.ConfigData">
<xmlString><![CDATA[<ConfigData>
<myField>Here we go:
Yup.
</myField>
</ConfigData>]]></xmlString>
</XmlBox>
<XmlBox className="com.example.ServiceDefinition">
<xmlString><![CDATA[<ServiceDefinition>
<name>Tricky?</name>
</ServiceDefinition>]]></xmlString>
</XmlBox>
预期结果:
<ConfigData>
<myField>Here we go:
Yup.
</myField>
</ConfigData>
<ServiceDefinition>
<name>Tricky?</name>
</ServiceDefinition>
捕获它的相关正则表达式是:
(?s)<XmlBox className=".+?">\s+<xmlString><!\[CDATA\[(.+?)\]\]></xmlString>\s+</XmlBox>
但是如何在一个简单的 bash 命令中自动化呢? 我以为这很容易,不是吗?
【问题讨论】:
-
我强烈建议使用旨在处理 xml 的程序来解析 xml。喜欢
xlmlint或xml_grep。 -
是的,但我不想依赖“有效”的 xml 解析器,这里只需要提取捕获的组,或者在标记之间做子串......没什么大不了的,正确的 ?顺便说一句,这对其他需求很有用,但感谢您的提示。
-
没什么大不了的。就像parsing html with regex 一样,这是个好主意。
-
99.999% 我的用例应该在这里工作......所以我不在乎:)