我想从alternatives --display java
列表中获取两个输出,一个是/usr/lib/jvm/jdk-1.8-oracle-x64/bin/java
,另一个是/usr/java/jdk-11.0.17/bin/java
,我使用以下命令
alternatives --display java | grep -o '^/usr.*bin/java\>'
我得到输出
/usr/lib/jvm/jdk-1.8-oracle-x64/bin/java
/usr/java/jdk-11.0.17/bin/java
具体来说,这个服务器安装了jdk 8和jdk 11。可以在上面的命令中添加什么额外的正则表达式来单独获得输出?我需要帮助与上述命令得到单一的输出为
/usr/lib/jvm/jdk-1.8-oracle-x64/bin/java
当尝试获取JDK-1.8和
/usr/java/jdk-11.0.17/bin/java
当尝试获取jdk-11.0.17时
例如,当我运行alternatives --display java | grep -o '^/usr.*1[.]8*bin/java\>'
时,输出应为/usr/lib/jvm/jdk-1.8-oracle-x64/bin/java
,当我运行alternatives --display java | grep -o '^/usr.*11[.]0[.]17*bin/java\>'
时,输出应为/usr/java/jdk-11.0.17/bin/java
。不幸的是,当我运行示例中的命令时,没有得到任何结果
1条答案
按热度按时间xvw2m8pv1#
根据OP的评论,以下内容不起作用:
这里的问题是
8*bin
和7*bin
,它表示匹配0个或多个字符8
或7
,后跟字符串bin
;当然,字符串.bin
、.8bin
、.8888bin
、.1bin
、.17bin
和.17777bin
不会出现在输入中,因此不会生成输出。尝试将
*
应用于单字符通配符(.
),就像在模式前面所做的那样(user.*
);因此,对OP当前代码稍作修改: