[英]BASH : Extended regex grep issue
我已經寫了下面的腳本來找到匹配的字符串。
#!/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"
產生outout,其中包含一個名為-XX:+UseCMSInitiatingOccupancyOnly
的字符串,但是我無法獲得輸出,它為空。
讓我們說說jvmmon命令的輸出是-XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark
注意:我必須使用grep -E,因為其他參數取決於此邏輯。
謝謝。
您有兩個問題,都涉及+
令牌。 +
是擴展的Regex模式,匹配一個或多個字符。
在可變聲明中,您具有str='XX:+UseCMSInitiatingOccupancyOnly'
並將其用作正則表達式模式。 然后問題是它將匹配:
一次或多次,但是您想按字面意義進行匹配。 因此,將其聲明為:
str='XX:\\+UseCMSInitiatingOccupancyOnly'
在Regex模式中,您的末尾有[^ ]+
,但是輸入字符串以UseCMSInitiatingOccupancyOnly
,因此不匹配。 因此,您需要[^ ]*
。
例:
$ str='XX:\+UseCMSInitiatingOccupancyOnly'
$ grep -Eo "\-${str}[^ ]*" <<<'-XX:+UseCMSInitiatingOccupancyOnly'
-XX:+UseCMSInitiatingOccupancyOnly
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.