我有以下正規表示式:
([: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}"