正規表示式不符

正規表示式不符

為什麼這不匹配..?

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

+- 一次或多次。

因此,命令 sed 將刪除與 --updated 匹配的每一行以及一個或多個空白字元和日期,但由於 ?字元 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 也可以匹配多個ds。然而+,可以透過簡單地重複模式 an 來替換,*第二次重複使用 a 。

更新

實際上,獲得擴展表達式的等效效果的方法是使用兩種模式:

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打開擴展正則表達式 so?並將+像您期望的那樣工作。這擴展正規表示式參考我使用最多的點是,在基本正規表示式(預設)中?必須+有一個前導反斜線才能具有其特殊意義。

相關內容