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

时间:2014-10-04 16:06:01

标签: 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")

但是我无法弄清楚如何得到这个&#34; jdk-8u20&#34;进入另一个变量!

我已经尝试了

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

你的grep模式和-o周围需要引号才能只打印字符串的匹配部分。

简化为:

$ test="/home/eg/Download/jdk-8u20-linux-x64.tar.gz"
$ test1=$(grep -o 'jdk-[^-]*' <<< $test)
$ echo $test1
jdk-8u20