正規表現が一致しません。

正規表現が一致しません。

これはなぜ似合わない..?

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つ以上の空白文字と日付に一致するすべての行を削除しますが、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

?残念ながら、実際の代替項目はないため、aを使用すると複数のs*と一致することができます。dただし、a を 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拡張正規表現をオンにすると、期待どおりに機能?します。+これ拡張正規表現リファレンス私が最もよく使うのは、基本正規表現(デフォルト)で特別な意味を持つためには、前にバックスラッシュがなければならない?ということです。+

関連情報