在 Windows 上,我尝试使用 GNU sed 4.0.7Unx工具类。
这有效……
sed "s@<time>@<TIME>@g" < input.txt > output.txt
…但是这什么也没做:
sed "s@<time>.+?</time>@@g" < input.txt > output.txt
转义字符没有帮助。知道原因吗?
谢谢。
答案1
sed使用 POSIX 正则表达式语法,又称正则表达式(7)(取决于您是否使用“扩展”或“基本”变体-r
)。
非贪婪+?
和*?
量词不存在在 POSIX 正则表达式中;它们更像是 PCRE 的东西。如果你想使用它们,你需要使用perl或一些类似的工具,例如:
perl -pe "s@<time>.+?</time>@@g"
如果必须使用 sed,这通常是一种可接受的解决方法:
sed -r "s@<time>[^<]+</time>@@g"
(请注意,+
在(过时的)基本变体中甚至不存在,因此您需要sed -r
激活扩展模式。)