簡體   English   中英

BASH:擴展的正則表達式grep問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM