【发布时间】:2020-11-03 22:03:30
【问题描述】:
我需要将以下文本中的 owl:Class 替换为 LP 编号
Input
<owl:Class rdf:about="https://loinc.org/LP173100-1">
<rdfs:subClassOf rdf:resource="https://loinc.org/LP410935-3"/>
<rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Counseling (LP)</rdfs:label>
<skos:prefLabel rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Counseling</skos:prefLabel>
<loinc:hasCode rdf:datatype="http://www.w3.org/2001/XMLSchema#string">LP173100-1</loinc:hasCode>
</owl:Class>
这样替换后的输出如下所示
Output
<LP173100-1 rdf:about="https://loinc.org/LP173100-1">
<rdfs:subClassOf rdf:resource="https://loinc.org/LP410935-3"/>
<rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Counseling (LP)</rdfs:label>
<skos:prefLabel rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Counseling</skos:prefLabel>
<loinc:hasCode rdf:datatype="http://www.w3.org/2001/XMLSchema#string">LP173100-1</loinc:hasCode>
</LP173100-1>
我在第一行使用了s/\(owl:Class\)\(.*org\/\)\(LP.*\)"/\3\2\3/g,但我不知道如何在最后一行应用它。有没有更优雅的解决方案?我有一个巨大的文件,我需要在其中进行此类替换。
我使用的是 Centos OS 7.7 Linux 机器。
【问题讨论】:
-
您是否尝试将 xml 节点中的标记名称替换为类似
"LP173100-1"的字符串?如果是这样,您应该知道 xml 标记名称周围不能有"。也许您的意思是替换为LP173100-1? -
您真的要为此使用
sed吗?使用 XML 工具可能会更容易、更健壮。 -
可能还可以看到 meta.stackoverflow.com/questions/261561/…,它主要讨论 HTML,但同样广泛的推理当然适用于任何 XML 应用程序或任何结构化格式。
-
在这种情况下,第 1 课:
sed不适用于 XML。 -
完全同意@chepner:xml 和正则表达式就像油和水。使用 xidel 或 xmlstarlet 之类的东西。