为什么这不匹配..?
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?
并将+
像您期望的那样工作。这扩展正则表达式参考我使用最多的点是,在基本正则表达式(默认)中?
必须+
有一个前导反斜杠才能具有其特殊含义。