【发布时间】:2020-08-22 12:27:01
【问题描述】:
我目前正在尝试从 xml 文件中删除包含特定模式的所有节点。
我需要删除所有块:
<artifactItem>...</artifactItem> containing libprogram-* in <artifactId>libprograms-*</artifactId>
这里是xml(只是开始):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
<parent>
<groupId>lu.foyer.exzos</groupId>
<artifactId>exzos</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
-->
<groupId>lu.foyer.exzos</groupId>
<artifactId>foyer-pms</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Foyer Pms</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<!--outputDirectory>${project.basedir}/run/programs</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeTransitive>true</excludeTransitive-->
<artifactItems>
<!-- Programs dependencies -->
<artifactItem>
<groupId>lu.foyer.exzos</groupId>
<artifactId>XactAnubexSyncJavaSupLib</artifactId>
<version>1.0-SNAPSHOT</version>
<outputDirectory>${project.basedir}/run/programs</outputDirectory>
<destFileName>XactAnubexSyncJavaSupLib.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>exzos.bazel</groupId>
<artifactId>libprograms-client-cobol</artifactId>
<version>1.0-SNAPSHOT</version>
<outputDirectory>${project.basedir}/run/programs</outputDirectory>
<destFileName>libprograms-client-cobol.jar</destFileName>
</artifactItem>
...
我尝试了几个 sed 命令,但都没有成功。
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
除此之外,迈克尔在回答中所说的话。
sed不是适合这项工作的工具。 -
引用的问题及其答案完美地说明了 sed 的局限性:只有当所需元素都在一行时,答案才有效。
-
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。