bash:扩展的正则GREP问题



我在下面写了一个脚本以查找匹配的字符串。

#!/usr/bin/env bash
str='XX:+UseCMSInitiatingOccupancyOnly'
echo "str :${str}"
output=$(jvmmon -pid "$(pgrep java)" -c "print vm information" | grep -Eo "-$str[^ ]+")
echo "output : $output"

命令, jvmmon -pid "$(pgrep java)" -c "print vm information" cod Outout包含一个名为-XX:+UseCMSInitiatingOccupancyOnly的字符串,但我无法输出,它是空的。

假设jvmmon命令是 -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark

注意:我必须使用grep -e,因为其他参数依赖于此逻辑。

谢谢。

您有两个问题,都涉及+令牌。 +是一个扩展的正则表达式模式,与一个或多个字符匹配。

  • 在变量脱平价中,您具有str='XX:+UseCMSInitiatingOccupancyOnly',并且将其用作正则模式。然后问题是它将一次或多次匹配:,但是您想从字面上匹配它。因此将其声明为:

    str='XX:+UseCMSInitiatingOccupancyOnly'
    
  • 在Regex模式中,您在末端具有[^ ]+,但是输入字符串以UseCMSInitiatingOccupancyOnly结束,因此不匹配。因此您需要[^ ]*

示例:

$ str='XX:+UseCMSInitiatingOccupancyOnly'                        
$ grep -Eo "-${str}[^ ]*" <<<'-XX:+UseCMSInitiatingOccupancyOnly'
-XX:+UseCMSInitiatingOccupancyOnly

相关内容

  • 没有找到相关文章

最新更新