如何用mikefarah/yq在Termux终端提取XML章节纯文本
问题描述
在Termux终端里,我想读取一个包含book、chapter、verse层级的XML文件,要求像cat那样只输出纯文本内容。用mikefarah/yq执行yq -p xml '.book.chapter' < nvi-2jo.xml后,输出里带了+@number和+content这些多余标识,我需要去掉它们,只打印章节下所有verse节点的纯文本内容。
示例XML内容
<?xml version="1.0" encoding="UTF-8"?> <book name="2ª João" abbrev="2jo" chapters="1"> <chapter number="1"> <verse number="1">O presbítero à senhora eleita e aos seus filhos, a quem amo na verdade, — e não apenas eu os amo, mas também todos os que conhecem a verdade —</verse> <verse number="2">por causa da verdade que permanece em nós e estará conosco para sempre.</verse> <verse number="3">A graça, a misericórdia e a paz da parte de Deus Pai e de Jesus Cristo, seu Filho, estarão conosco em verdade e em amor.</verse>
当前命令输出
+@number: "1" verse: - +content: O presbítero à senhora eleita e aos seus filhos, a quem amo na verdade, — e não apenas eu os amo, mas também todos os que conhecem a verdade — +@number: "1" - +content: por causa da verdade que permanece em nós e estará conosco para sempre. +@number: "2" - +content: A graça, a misericórdia e a paz da parte de Deus Pai e de Jesus Cristo, seu Filho, estarão conosco em verdade e em amor.
期望输出
O presbítero à senhora eleita e aos seus filhos, a quem amo na verdade, — e não apenas eu os amo, mas também todos os que conhecem a verdade — por causa da verdade que permanece em nós e estará conosco para sempre. A graça, a misericórdia e a paz da parte de Deus Pai e de Jesus Cristo, seu Filho, estarão conosco em verdade e em amor.
解决方案
直接用下面的yq命令就能得到想要的纯文本输出:
yq -p xml -o text '.book.chapter.verse[].+content' < nvi-2jo.xml
命令说明
-p xml:告诉yq输入是XML格式-o text:指定输出为纯文本,不会带YAML的格式标识.book.chapter.verse[]:遍历章节下的所有verse节点+.content:提取每个verse节点里的文本内容(yq会把XML元素的文本内容命名为+content)
执行这个命令后,输出就会和期望的一致,只有纯文本内容。
内容的提问来源于stack exchange,提问作者Patrick Freitas
相关产品推荐
相关产品推荐

