grep返回行,但不包含模式

问题描述 投票:-1回答:1

我正在寻找一种从文件名生成目录的方法,版本的一部分。我需要将此新目录设置为变量,以便提取,chmod symlink等。

find *.jar | grep -Ei "*-[0-9]."
/test/gb0100-sting-junit5-1.5.0.0.jar

我只需要gb0100-sting-junit5部分。

我知道我只能过滤版本部分,但之前我不知道如何对部分进行正则表达式

grep -Po "-[0-9].[0-9].[0-9].[0-9]"
bash grep find
1个回答
0
投票

对于更一般的情况,当版本号可能超过一个数字时,请考虑以下选项

使用bash模式,消除数字/点和jar后缀的尾随顺序

shopt -s extglob
for file in *.jar ; do
    printf '%s\n' "${file%%-+([0-9.]).jar}"
done

有时,使用功能更强大的REGEX更容易,它可以用来定义拒绝诸如'5..2.jar'之类的组合的规则。而且,制作REGEX规则通常比模式规则更容易。] >

for file in *.jar ; do
   [[ "$file" =~ ^(.*)-+([0-9])(\.[0-9]+)*.jar ]] && printf '%s\n' "${BASH_REMATCH[1]}"
done
© www.soinside.com 2019 - 2024. All rights reserved.