【发布时间】:2019-06-28 08:37:43
【问题描述】:
更新 2
我想我需要这样简单的东西:
Regex with negative lookahead across multiple lines
获取第一个不在父级之前的位置 我试过这个没有成功
((?<![<parent>]))<version>.*
或者这个,但它仍然捕获所有版本的:
(?<!^<parent>)<version>(?!<\/parent>)
如何使用 sed 和 grep 从标签中获取字符串
我尝试捕获标签:
<groupId>org.test.proj.assent</groupId>
<artifactId>mainapp</artifactId>
<version>mainapp.1.4</version>
<packaging>pom</packaging>
<name>main app 1</name>
然后我想我会从那里提取字符串:
<version>mainapp.1.4</version>
我试过这个:
sed -n '/version/,/version/p' pom.xml | grep -o -e '<version>.*'
但它给了我所有的版本
我也尝试捕捉:
sed -n '/\/artifactId/,/\/version/p' pom.xml | grep -o -e '<version>.*'
但是所有文件都被打印出来了
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" >
<modelVersion>55.0.0</modelVersion>
<parent>
<groupId>org.test.proj</groupId>
<artifactId>test-invoker</artifactId>
<version>invoker.0.4</version>
</parent>
<groupId>org.test.proj.assent</groupId>
<artifactId>mainapp</artifactId>
<version>mainapp.1.4</version>
<packaging>pom</packaging>
<name>main app 1</name>
<properties>
<app-name>Testing App</app-name>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.prod.db</groupId>
<artifactId>srver-db</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
我只能使用没有安装的原生 linux 工具
更新的 xml 和要捕获的字符串
【问题讨论】:
-
您可以使用专用的XML parsing tool 吗?
sed和grep不支持 XML 语法。 -
不,我不能纯 linux 工具
-
是的标准 AWS linux
-
@user63898 您可以添加示例输入并显示输出所需的确切字符串吗?有多个
<version>标签,你需要在什么基础上选择作为输出?是字符串this one i need还是别的什么?另外,这个标签可以跨多行吗? -
不要使用正则表达式解析 XML。或者至少,阅读stackoverflow.com/questions/1732348/…,这样你就知道你在做什么了。