我在下面写了一个脚本以查找匹配的字符串。
#!/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