正規表現と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

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}"

関連情報