如何从一组行中仅获取版本?
以下是inn平面文件中的行:
./org.jamon/jamon-runtime/jars/jamon-runtime-2.3.1.jar
./org.apache.ftpserver/ftplet-api/bundles/ftplet-api-1.0.0.jar
./org.clojars.jasonjckn/kafka_2.9.2/jars/kafka_2.9.2-0.7.2-test1.jar
./org.apache.ftpserver/ftpserver-deprecated/jars/ftpserver-deprecated-1.0.0-M2.jar
./org.codehaus.jettison/jettison/bundles/jettison-1.1.jar
./stax/stax-api/jars/stax-api-1.0.1.jar输出:
2.3.1
1.0.0
0.7.2-test1
1.0.0-M2
1.1发布于 2014-05-16 03:54:25
对于sed解决方案:
sed 's/.*-\([0-9][0-9.]*[^\/]*\)\.jar$/\1/'解释:
revision + ".jar“仅包含revision,其中:
revision标识为:以数字开头,后跟数字或圆点,后跟除斜杠/之外的任何文本,并且前面有一个连字符-.
发布于 2014-05-16 03:15:10
使用带有-P选项的GNU (用于向前看和向后看的PCRE正则表达式):
grep -oP '(?<=-)[0-9.]+[-[:alnum:]]*(?=\.jar)' file
2.3.1
1.0.0
0.7.2-test1
1.0.0-M2
1.1
1.0.1正如注释中建议的那样,cbuckley的更通用的表达方式是(如果您的文件具有.jar以外的扩展名,则可以使用:
grep -oP '(?<=-)[\d.]+[-\w]*(?=\.\w+)' file发布于 2014-05-16 03:19:46
这就是了:
awk -F/ '{n=split($NF,a,"-");if (a[n-1]~/[0-9.]+/) a[n]=a[n-1]"-"a[n];sub(/\.jar$/,"",a[n]);print a[n]}' file
2.3.1
1.0.0
0.7.2-test1
1.0.0-M2
1.1
1.0.1如果你有gnu grep使用Jaypal解决方案:),这个awk应该可以在大多数系统上工作。
https://stackoverflow.com/questions/23686625
复制相似问题