我想读取 pom.xml(Maven 的“项目对象模型”)并提取版本信息。下面是一个例子:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>project-parent</artifactId>
<name>project-parent</name>
<version>1.0.74-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.sybase.jconnect</groupId>
<artifactId>jconnect</artifactId>
<version>6.05-26023</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
如何从上面提取版本“1.0.74-SNAPSHOT”?
希望能够使用简单的 bash 脚本 sed 或 awk 来做到这一点。否则首选简单的python。
编辑
约束
linux box 在公司环境中,所以我只能使用已经安装的工具(不是说我不能请求诸如 xml2 之类的实用程序,但我必须经历很多繁文缛节)。一些解决方案非常好(已经学习了一些新技巧),但由于环境限制,它们可能不适用
更新的 xml 列表
我在原始列表中添加了依赖项标签。这将显示一些 hacky 解决方案在这种情况下可能不起作用
发行版
我使用的发行版是 RHEL4
我有一堆媒体文件,如下所示:
tvshow.s01e11]Bloodlines.avi
tvshow.s01e12]suffer.avi
tvshow.s01e13]NotMe.avi
Run Code Online (Sandbox Code Playgroud)
我想将它们重命名为
tvshow.s01e11.avi
tvshow.s01e12.avi
tvshow.s01e13.avi
Run Code Online (Sandbox Code Playgroud)
我试过使用重命名,但显然我没有得到正确的语法,因为它失败了。
我有一个 bash 脚本,其中$DIR是一个可能包含空格的目录名。
这个:
rm "$DIR/*.MOV"
Run Code Online (Sandbox Code Playgroud)
给出错误“没有这样的文件或目录”。没有字面上命名为“*.MOV”的文件;我希望*扩展为多个参数 - 每个匹配的文件名一个。
例如:
rm some\ folder/foo.MOV some\ folder/bar.MOV
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有以下声明:
TOKENARRAY=($TOKEN)
Run Code Online (Sandbox Code Playgroud)
$TOKEN 是一个数值变量。
如果我试试这个:
echo ${TOKENARRAY[0]}
Run Code Online (Sandbox Code Playgroud)
它向我显示了一个空字符串。
如果我做:
echo ${TOKENARRAY:0}
Run Code Online (Sandbox Code Playgroud)
它向我展示了令牌
但真正奇怪的是,如果我这样做:
echo ${TOKENARRAY[1]}
Run Code Online (Sandbox Code Playgroud)
它向我展示了令牌。
这里发生了什么?这个脚本应该在 bash 中工作,但它在 zsh 中不起作用。
我安装了 macports,但我使用 zsh。我应该在 .zshrc 文件中修改什么才能让它寻找 macports?我认为 macports 位于 /opt/local/bin/port