我尝试从KML文件中删除下面的代码部分,理想情况下使用简单的Bash/sed代码。
我熟悉使用sed
删除XML标记,但不确定如何删除与特定名称匹配的子标记。
为了重新迭代,我需要匹配并从KML文件中删除整个“Overlay”<Folder></Folder>
标签。
尝试用于分析所需模式匹配的Bash代码:
grep -B 1 "<name>Overlay</name>" -A 9
KML代码:
<Folder>
<name>Overlay</name>
<open>0</open>
<Style>
<ListStyle>
<listItemType>check</listItemType>
<bgColor>00ffffff</bgColor>
<maxSnippetLines>2</maxSnippetLines>
</ListStyle>
</Style>
</Folder>
3条答案
按热度按时间ru9i0ody1#
这可能对你有用(GNU sed):
收集
<Folder>
到</Folder>
范围内的行,如果集合中包含<name>Overlay</name>
,则将其删除。x6yk4ghg2#
建议使用一行
gawk
(大多数Linux机器中的正常awk
)脚本:0lvr5msh3#
yq可用于您的任务。
它是一个YAML处理器,也可以处理XML,语法类似于jq。
就我对你的理解而言,你想删除所有的元素,包括它的子数据,这些元素的子元素是
<name> = 'Overlay'
。NAME=Overlay yq --input-format xml --output-format xml e 'del(.. | select(type == "!!map") | select(.name == env(NAME)))' $INPUTFILE
输入
输出