正規表現が一致しない

正規表現が一致しない

なぜこれが一致しないのでしょうか..?

sed -e '/--Updated?[[:space:]]+Date/d' inputfile

これ..:

--Updated Date: 2013-11-06 15:32:13

d?なぜなら、時には がありUpdate Date、時には があるからですUpdated Date

削除するには?私も試しましたが\s、機能しませんでした。

答え1

パラメータを使用する必要があります-r

sed -r '/--Updated?[[:space:]]+Date/d' inputfile

回答を更新

を使用するとsed '/something/d'、これに一致するすべての行が削除されます。

-r - パラメーター -r は拡張正規表現を使用します。

式の中には 2 つの正規表現があります。

[[:space:]]- 改行を含むすべての空白文字に一致します

? - optional

+- 1 回以上。

したがって、コマンド sed は、--updated に一致し、1 つ以上の空白文字と Date を含むすべての行を削除しますが、? があるため、文字 d はオプションです。次のようになります。

--Updated Date: 2013-11-06 15:32:13
--Updated   Date: 2013-11-06 15:32:13
--Updated           Date: 2013-11-06 15:32:13
--Update Date: 2013-11-06 15:32:13

答え2

POSIX 基本正規表現を使用してこれを行うには、最も近い方法は次のとおりです。

sed '/--Updated*[[:space:]][[:space:]]*Date/d' inputfile

残念ながら、 の実際の代替はないので?、 が*使用されますが、これも複数の に一致しますd。ただし、 は、+パターン an を繰り返し、2 回目の繰り返しに を使用することで置き換えることができます*

アップデート

実際に、拡張された式と同等の効果を得るには、次の 2 つのパターンを使用します。

sed \'
  /--Updated[[:space:]][[:space:]]*Date/d
  /--Update[[:space:]][[:space:]]*Date/d
  ' inputfile

答え3

cygwin 上の gnu sed 4.2.2 では、次の-rフラグを追加します。

 '--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'

出力は何も印刷されません。 -r拡張正規表現を有効にすると?+期待どおりに動作します。拡張正規表現のリファレンス私が最もよく使用するポイントは、基本的な正規表現 (デフォルト) では、特別な意味を持たせるためには先頭にバックスラッシュを付けなければならないという?ことです。+

関連情報