2013-06-26 28 views
2

我试图完成以下任务中提取特定值:脚本:如何针对特定的pom.xml文件,并在标签

  1. 查找名为“pom.xml中”的目录层次结构中的所有文件。 (不显示结果)
  2. 然后,我将识别父母/ artifactId为“Maven_CAS_Parent”或“Maven_JAB_Parent”的那些“pom.xml”。 (我需要pom.xml路径和父项artifactId)
  3. 过滤后,在范围内的“pom.xml”中,我尝试将父/版本值提取到名为“check.txt”的文本文件中。 (在这里我需要父版本)

其中的“pom.xml的” S看起来像这样(简体版):

<properties> 
    <jiraKey>ORCAP</jiraKey> 
    <commonName>${jiraKey} - CASDOP</commonName> 
    <ear>CAS_ORCAP_EAR</ear> 
    <war>CAS_ORCAP_WAR</war> 
     <cas.version>1.4</cas.version> 
     <cas.dep.version>1.3</cas.dep.version> 
</properties> 
<parent> 
    <artifactId>Maven_CAS_Parent</artifactId> 
    <groupId>csju.maven</groupId> 
    <version>1.4.38</version> 
</parent> 
<modelVersion>4.0.0</modelVersion> 
     <groupId>dgy.orcap</groupId> 
     <artifactId>IHSB_ORCAP</artifactId> 
     <version>1.0.2-SNAPSHOT</version> 
<packaging>pom</packaging> 
<name>${commonName}</name> 
<description>none</description> 
<url>${siteURL}${project.groupId}</url> 

话虽这么说,我想在这个命令的输出: pom文件的路径,父级artifcatId,父级版本。例如:

NSS-BUILD3-JOB1/pom.xml Maven_CAS_Parent 1.4.38 

我非常新的,但我得到了下面的命令。我知道这个命令不起作用,不会创建一个check.txt文件,但我该如何修复它或写一个新的文件?

#!/bin/bash 
check() 
{ 
echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:parent/x:version/text()' | xmllint --shell pom.xml | grep -v/
} 

find . -type f -name pom.xml | xargs grep 'Maven_CAS_Parent\|Maven_JAB_Parent' | Check 
+0

将grep和'if ... fi'块移到一个单独的脚本中,然后调用它'find ... | xargs/path/to/myMavenFinder.sh'。祝你好运。 – shellter

+0

我明白你在说什么,我会试试看,谢谢。但我正在尝试编写一个完成所有这些脚本的脚本。 –

+0

顺便提一句,+1优秀的第一篇文章,包括示例输入,需要输出和喘气,试图解决您的问题。继续发帖,祝你好运! – shellter

回答

0

您可以通过遍历由find找到的文件如下图所示的例子中做到这一点:

while IFS= read -r file 
do 
    artifactId=$(xmllint --format --shell "$file" <<< "cat //parent/artifactId/text()" | grep -v /) 
    if [[ $artifactId =~ ^(Maven_CAS_Parent|Maven_JAB_Parent)$ ]] 
    then 
     version=$(xmllint --format --shell "$file" <<< "cat //parent/version/text()" | grep -v /) 
    else 
     artifactId="Out of scope" 
     version="" 
    fi 
    echo "$file $artifactId $version"  
done < <(find . -type f -name "pom.xml") 

你可能会需要修复的XPath,让他们为你工作。

+0

谢谢dogbane,我只是修改了帖子并删除了if函数,因为我不需要显示超出范围的poms。无论如何,你的版本似乎更好,我会玩你的文章,看看我能从中得到什么。 –

相关问题