解析jar文件名

rdu*_*upz 1 regex bash filenames jar

假设您想要从 jar 文件名中提取名称和版本的最佳模式。我得到了一些不错的东西,它适用于regexr但不适用于 bash。这是因为 bash 不支持非贪婪正则表达式。那么应该如何处理呢?

#!/bin/bash

filename="./log4j-enhanced-3.5.100-v20130422-1538.jar"

if [[ "$filename" =~ \.\/(.*?)-([0-9].*)\.jar ]]; then
        echo "name    =  ${BASH_REMATCH[1]}"
        echo "version =  ${BASH_REMATCH[2]}"
fi

# expected :
# name    = log4j-enhanced
# version = 3.5.100-v20130422-1538
Run Code Online (Sandbox Code Playgroud)

使用 unix 实用程序是可以的,但请使其可读。

Cyr*_*rus 5

使用 GNU bash 的参数扩展

filename="./log4j-enhanced-3.5.100-v20130422-1538.jar"

filename="${filename#./}"
name="${filename%%-[0-9]*}" 
version="${filename#$name-}"
version="${version%.jar}"

echo "name    = $name"
echo "version = $version"
Run Code Online (Sandbox Code Playgroud)

输出:

名称 = log4j 增强型
版本 = 3.5.100-v20130422-1538