だから私は年番号のシーケンスをgrepと一致させようとしていますが、これは簡単なはずです。単純な正規表現が機能していないことに少し困惑しています。
私がやっていることは、いくつかのファイルをアーカイブするツールを実行していますが、ファイルを正しいディレクトリに配置するには、ファイルの日付を確認する必要があります。私はすでに適切にフォーマットされた入力を持っています。
<span class='t-d'>1994-Oct-28</span>
これはほんの一例です。これがある場合は、1994年の部分だけを取得し、これを使用して正しい年にアーカイブを続けたいと思います。私はこのようなもので十分だと思っていました:
grep -o '[0-9]{4}'
しかし、これは何にも一致しないようです。私が次のようなことを試みるとき:
grep -o '[0-9]'
すべての個別の番号に一致するため、1 9 9 42および8です。
したがって、私の構文は間違っていますが、私の知識では、これは0から9の数に4回一致し、{}は範囲または正確な範囲のいずれかで長さを指定します。誰かがこの単純な構文で私を助けてくれるなら、それは非常にありがたいです。
{4}
は extended正規表現 です。 -E
オプションを指定しない限り、grep
はそれを理解しません。
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.)
で試してみてください
grep -E '[0-9]{4}'
例
$ echo abcd1234abcd | grep -o -E '[0-9]{4}'
1234
[:digit:]
文字クラスを使用して、シンボルの順序が異なる可能性があるロケールの問題を回避することもできます。
$ echo abcd1234abcd | grep -o -E '[[:digit]]{4}'
1234
何らかの理由で拡張正規表現を使用したくない場合は、次を使用できます。
grep -o '[0-9][0-9][0-9][0-9]'