70

文字列を照合できないのはなぜですか

"1234567-1234567890"

指定された正規表現で

\d{7}-\d{10}

次のようなegrepシェルから:

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

?

4

5 に答える 5

88

egrepは数字文字クラスの短縮形を認識しない\dため、たとえば を使用する必要があります[0-9]

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

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

こちらもご覧ください

参考文献

于 2010-07-06T10:42:31.013 に答える
27

完全を期すために:

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

  • [:年数:]
  • [:アルファ:]
  • [:コントロール:]
  • [:桁:]
  • [:グラフ:]
  • [:低い:]
  • [:印刷:]
  • [:パンク:]
  • [:スペース:]
  • [:アッパー:]
  • [:x桁:]

例 (二重括弧に注意してください):

egrep '[[:digit:]]{7}-[[:digit:]]{10}' file
于 2013-01-22T16:47:31.257 に答える
21

\d「perl regex」オプションを grep に渡すと、次のように使用できます。

grep -P "\d{9}"

于 2015-10-16T19:09:41.020 に答える
11

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

于 2010-07-06T10:44:26.553 に答える
-3

これを試してください:

egrep '(\d{7}-\d{10})' file
于 2010-07-06T10:45:53.993 に答える