web-dev-qa-db-ja.com

egrepでパターンマッチング数字が機能しませんか?

なぜ文字列を一致させることができません

"1234567-1234567890"

与えられた正規表現で

\d{7}-\d{10}

シェルからのegrepは次のようになります。

egrep \d{7}-\d{10} file

55
user377622

egrep\d数字文字クラスの短縮形を認識しないため、たとえば[0-9]

さらに、この場合は絶対に必要というわけではありませんが、シェルによる誤解を防ぐために正規表現を引用するのは良い習慣です。したがって、次のようなものが機能するはずです。

egrep '[0-9]{7}-[0-9]{10}' file

こちらもご覧ください

参照資料

68

完全を期すために:

実際、Egrepは文字クラスをサポートしています。クラスは次のとおりです。

  • [:alnum:]
  • [:アルファ:]
  • [:cntrl:]
  • [:桁:]
  • [:グラフ:]
  • [:下:]
  • [:print:]
  • [:punct:]
  • [:スペース:]
  • [:アッパー:]
  • [:xdigit:]

例(二重括弧に注意):

egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
23
André Laszlo

grepに「Perl regex」オプションを渡す場合、\dを使用できます。例:

grep -P "\d{9}"

16
rogerdpack

\ dの代わりに[0-9]を使用します。 egrepは\ dを知りません。

11
sepp2k