将来自grep的匹配存储在变量中

Jay*_*rds 2 regex linux bash grep

我具有以下扩展名:“ / home / eg / Download / jdk-8u20-linux-x64.tar.gz”

我现在想将“ jdk-8u20”传递给一个单独的变量。

JS中的相关正则表达式将是 /jdk\-[0-9]u[0-9][0-9]?[0-9]?[0-9]?/

当我在命令提示符下运行以下命令时,我可以让grep确认有问题的数据:

test="/home/eg/Download/jdk-8u20-linux-x64.tar.gz"
grep jdk\-[0-9]u[0-9][0-9]*[0-9]*[0-9]* <(echo "$test")
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将“ jdk-8u20”转换为另一个变量!

我试过了

test1=${grep jdk\-[0-9]u[0-9][0-9]*[0-9]*[0-9]* <(echo "$test")}
Run Code Online (Sandbox Code Playgroud)

但是echo $ test1仅返回完整的文件路径。我需要做什么?

Avi*_*Raj 5

您需要在引号内添加模式,还需要启用-o仅显示匹配PATTERN的行的一部分)参数。

$ test="/home/eg/Download/jdk-8u20-linux-x64.tar.gz"
$ test1=$(grep -o 'jdk-[0-9]u[0-9][0-9]*[0-9]*[0-9]*' <<< $test)
$ echo $test1
jdk-8u20
Run Code Online (Sandbox Code Playgroud)