我请求你的帮助。
我查阅了很多资料,并使用 awk 和 sed 做了一些测试,但我无法让它工作。下面是配置文件的片段,我可以通过 grep 获得输出,但不是我需要的方式。
> file.txt
>
> "<property>name="DBName"><value>ABC</value>name="DBName"><value>DEF</value></property>
>
> cat file.xml | grep -o -P '.name="DBName"><value>.{0,20}'
> name="DBName"><value>ABC</value>
> name="DBName"><value>DEF</value></propert
期望的输出是:
ABC
DEF
谢谢你的帮助。
和我
如果(巨大的,巨大的“如果”)你的文件实际上只有非常简单的情况,你想要精确的字符串
<value>
后跟一些非<
字符然后</value>
,所以你的问题可以表述为“给我取简单的,非字符的字符串” -在每次出现的<value>
和其后的第一个之间找到换行符<
”,那么你可以这样做(使用 GNUgrep
):当然,即使稍有不同,这也会失败。例如,如果您有多行值,或者值标记可以具有类似
<value foo=bar>
或 的内容,则可以在任意数量的其他完全有效的 XML 情况下进行。正确的方法©是使用 XM: 解析器。您可能想查看xmllint
XMLStarlet等。如果您的所有输入看起来与您发布的一行示例输入完全相同:
然后使用任何 awk:
但是,与任何其他不使用 XML 解析器的解决方案一样,它很脆弱。
非常感谢,这对我有用。这里总结一下mr的更多示例代码和最终解决方案:
如果您有一个格式良好的 XML 输入,例如我们
您可以使用 XML 感知工具,并使用 Xpath(或类似工具)来选择要提取的部分。xidel的示例: