簡體   English   中英

如何在bash中執行簡單的正則表達式匹配?

[英]How do I perform a simple regular expression match in bash?

我正在嘗試匹配字符串開頭的數字

452MATCHME

有了這個簡單的正則表達式

/^\d*/

我希望這個結果保存在一個變量中

452

但我無法找到獲得操作結果的方法。 我已經閱讀了本教程 ,但它描述了一個數組BASH_REMATCH ,其中存儲了=~操作的所有匹配結果。 出於某種原因,在我的情況下,該數組不存在。 我正在使用bash版本4.2.10(1)。

我能想到的唯一另一個選擇是grep ,但據我所知,只能輸出與正則表達式匹配的行。

我怎樣才能達到我的結果?

var=452MATCHME
echo ${var%%[^0-9]*}

這將從第一個非數字刪除到結尾。

對於大多數情況,Bash參數已足夠,所以我建議您熟悉它。 以下是bash模式的鏈接: http//www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching

這將工作:

if [[ "452MATCHME" =~ ^([0-9]+).* ]]
then 
    echo ${BASH_REMATCH[1]};
fi

PS:我正在使用bash 3.0版本,它只是你的正則表達形式不好。

所以似乎問題是BASH正則表達式不支持\\d 請改用[0-9]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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