
為什麼這不匹配..?
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 也可以匹配多個d
s。然而+
,可以透過簡單地重複模式 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?
並將+
像您期望的那樣工作。這擴展正規表示式參考我使用最多的點是,在基本正規表示式(預設)中?
必須+
有一個前導反斜線才能具有其特殊意義。