linux - 在 bash 中排序输出

标签 linux bash sorting pom.xml

我有以下脚本通过查看它们的 pom.xml 来检查我的不同 Maven 项目的父版本。

#!/bin/bash
# Loop to find all pom.xml
for i in `find . ! -path "*/target/*" -type f -name pom.xml`
do
    # Filter the parent artifactId.
    grep -q 'IC_Maven_JEE_Parent\|IC_Maven_Parent' $i
    if [ "$?" -eq 0 ]; then
    # Print parent ID, version value, and then pom.xml path.
    echo $(grep -o 'IC_Maven_JEE_Parent\|IC_Maven_Paren' $i) $(echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:parent/x:version/text()' | xmllint --shell $i | grep -v /) $i
    fi
done

我的测试文件夹中的输出如下所示,未排序且无信息。

IC_Maven_JEE_Parent ------- 1.4.44 ./AGS-DEF-JOB1/pom.xml
IC_Maven_JEE_Parent ------- 1.4.44 ./AGS-SITE-JOB1/pom.xml
IC_Maven_Paren ------- 1.5.44 ./AGS-SITESSL-JOB1/pom.xml
IC_Maven_JEE_Parent ------- 6.2 ./AIRR-COMMODITIES-JOB1/pom.xml
IC_Maven_JEE_Parent ------- 6.2 ./AIRR-DEF14-JOB1/pom.xml
IC_Maven_Paren ------- 1.4.38 ./pom.xml

我想对输出进行排序(首先根据父 ID,然后是版本值,最后是路径),以便我知道升级的优先级。它应该如下所示。

IC_Maven_JEE_Parent ------- 1.4.44 ./AGS-DEF-JOB1/pom.xml
IC_Maven_JEE_Parent ------- 1.4.44 ./AGS-SITE-JOB1/pom.xml
IC_Maven_JEE_Parent ------- 6.2 ./AIRR-COMMODITIES-JOB1/pom.xml
IC_Maven_JEE_Parent ------- 6.2 ./AIRR-DEF14-JOB1/pom.xml
IC_Maven_Paren ------- 1.4.38 ./pom.xml
IC_Maven_Paren ------- 1.5.44 ./AGS-SITESSL-JOB1/pom.xml

我的帖子更新(6 月 8 日 14:13)。

我取得的最接近点是将输出保存到文件中,然后对文件进行排序,如以下脚本所示:

#!/bin/bash
for i in `find . ! -path "*/target/*" -type f -name pom.xml`
do
    grep -q 'IC_Maven_JEE_Parent\|IC_Maven_Parent' $i
    if [ "$?" -eq 0 ]; then
    echo $(grep -o 'IC_Maven_JEE_Parent\|IC_Maven_Paren' $i) $(echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:parent/x:version/text()' | xmllint --shell $i | grep -v /) $i
    fi
done > check.txt
sort ./check.txt

最佳答案

您只需在循环末尾添加 sort 即可对输出进行排序。

#!/bin/bash
for i in `find . ! -path "*/target/*" -type f -name pom.xml`
do
    grep -q 'IC_Maven_JEE_Parent\|IC_Maven_Parent' $i
    if [ "$?" -eq 0 ]; then
    echo $(grep -o 'IC_Maven_JEE_Parent\|IC_Maven_Paren' $i) $(echo -e 'setns x=http://maven.apache.org/POM/4.0.0\ncat /x:project/x:parent/x:version/text()' | xmllint --shell $i | grep -v /) $i
    fi
done | sort

关于linux - 在 bash 中排序输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17368091/

相关文章:

java des cipher在windows上的不同结果

php - 检测危险的 unix 命令行元字符

c++ - 不匹配运算符[]

mongodb - Mongodb聚合框架,排序然后分组不起作用

linux - Getopts 默认情况下的 bash 脚本

在 Haskell 中对抽象数据类型进行排序

linux - preempt_rt 的缺点

linux - 如何在远程机器上运行多个脚本

linux - 如何让 Bash 自动将每个命令的输出传输到 tee 之类的东西?

linux - 将文件递归重命名为 ASCII 标准