linux 如何从替代的结果中grep所需的字符串--显示java使用start和end with?

2ic8powd  于 2023-06-21  发布在  Linux
关注(0)|答案(1)|浏览(137)

我想从alternatives --display java列表中获取两个输出,一个是/usr/lib/jvm/jdk-1.8-oracle-x64/bin/java,另一个是/usr/java/jdk-11.0.17/bin/java,我使用以下命令

  1. alternatives --display java | grep -o '^/usr.*bin/java\>'

我得到输出

  1. /usr/lib/jvm/jdk-1.8-oracle-x64/bin/java
  2. /usr/java/jdk-11.0.17/bin/java

具体来说,这个服务器安装了jdk 8和jdk 11。可以在上面的命令中添加什么额外的正则表达式来单独获得输出?我需要帮助与上述命令得到单一的输出为

  1. /usr/lib/jvm/jdk-1.8-oracle-x64/bin/java

当尝试获取JDK-1.8和

  1. /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。不幸的是,当我运行示例中的命令时,没有得到任何结果

xvw2m8pv

xvw2m8pv1#

根据OP的评论,以下内容不起作用:

  1. grep -o '^/usr.*1[.]8*bin/java\>'
  2. ^^^^^
  3. grep -o '^/usr.*11[.]0[.]17*bin/java\>'
  4. ^^^^^

这里的问题是8*bin7*bin,它表示匹配0个或多个字符87,后跟字符串bin;当然,字符串.bin.8bin.8888bin.1bin.17bin.17777bin不会出现在输入中,因此不会生成输出。
尝试将*应用于单字符通配符(.),就像在模式前面所做的那样(user.*);因此,对OP当前代码稍作修改:

  1. grep -o '^/usr.*1[.]8.*bin/java\>'
  2. ^
  3. grep -o '^/usr.*11[.]0[.]17.*bin/java\>'
  4. ^

相关问题