正規表示式和 grep 不起作用

正規表示式和 grep 不起作用

我有以下正規表示式:

([:digit:]{4})-([:digit:]{1,2})-([:digit:]{1,2})

它應該以這種格式獲取日期:

2010-12-19

我在如下所示的文件名上使用它:

2010-12-19-xxx-xxx-xxx.markdown

而且,當我像這樣使用它時grep

echo $POST | grep -oE "([:digit:]{4})-([:digit:]{1,2})-([:digit:]{1,2})" # $POST is the filename

這不起作用,我只是感到空虛。

答案1

試試這個:-

echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"

如果我在這裡嘗試,我會得到:-

[andys@daedalus ~]$ echo "2010-12-19-aaa-bbb-ccc-ddd.markdown" | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"
2010-12-19

希望這就是您正在尋找的。

答案2

安迪的答案很好,但如果你想要更接近原始語法的東西,你可以嘗試:

echo $POST | egrep -oE "([[:digit:]]{4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})"

您需要這裡的egrep來擴展正規表示式,並需要雙括號來表示字元類別。

答案3

您不需要括號,但確實需要更多方括號。字元類別與單一字元具有相同的特徵。正如您可能搜尋這樣的元音:[aeiou]或這樣的數字:[0123456789]或這樣: ,您也[0-9]需要將一個類別(例如[:digit:]或 )括在方括號表達式中:(十六進制數字)。[:upper:][[:xdigit:]]

grep -oE "[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2}"

相關內容