我有以下扩展名: " /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只返回完整的文件路径。我需要做什么?
答案 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