sed 匹配总是贪婪的吗?
我正在尝试使用 sed 尽早将 XML 注释附加到 XML 文件中,该注释位于 XML 声明之后(如果有的话)。在 shell 环境中是这样的:
sed -e 's/\(<?xml[^?]*?>\)\?$/\1<!-- This is the new comment -->/'
我知道 sed 想要找到最左边的匹配,并在匹配开始的最左边的位置尽可能贪婪。但是,可选组与任何 XML 声明都不匹配,如下所示:
<?xml version="1.0" encoding="utf-8"?>
相反,它选择匹配空字符串,因此注释会附加在 XML 声明之前。这是为什么?
如果我强制指定该组,它就会按预期匹配。
答案1
啊。该文档以 UTF-8 BOM 开头。
因此,空字符串匹配发生在 BOM 之前,而 BOM 之后的“预期”匹配不是最左边的可能匹配。