次の正規表現があります:
([: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
Andy の答えは問題ありませんが、元の構文に近いものが必要な場合は、次を試してみてください。
echo $POST | egrep -oE "([[:digit:]]{4})-([[:digit:]]{1,2})-([[:digit:]]{1,2})"
ここでは、拡張正規表現には egrep が必要であり、文字クラスには二重括弧が必要です。
答え3
括弧は必要ありませんが、角括弧は必要です。文字クラスは個々の文字と同じ特性を持ちます。母音を次のように検索する場合や[aeiou]
、数字を次のように検索する場合と同様に、または[0123456789]
など[0-9]
のクラスを括弧式で囲む必要があります: (16 進数字)。[:digit:]
[:upper:]
[[:xdigit:]]
grep -oE "[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2}"