SED{命令失败

SED{命令失败,sed,mks,Sed,Mks,在用于Windows的MKS SED上,此 TYPE Q:\temp\curtainssetspread.M3U | SED -E "/z/{s_a_b_}" 失败于 sed: garbage after command 为什么? 此用法与以下文档完全一致: a,b{ groups all commands until the next matching }, so that sed executes the entire group only if the { command is

在用于Windows的MKS SED上,此

TYPE Q:\temp\curtainssetspread.M3U | SED -E "/z/{s_a_b_}"
失败于

sed: garbage after command
为什么?

此用法与以下文档完全一致:

a,b{    groups all commands until the next matching }, so that sed executes the entire group only if the { command is selected by its address(es).
根据,必须在
}
前面加一个换行符。我不确定MKS是做什么的,但有一个标准的好处是,以下内容应该适用于所有系统(使用多个
-e
s将每个字符串与中间的换行连接在一起):

如果它不起作用,那就是MKS中的一个bug,应该报告,因为他们说他们的
sed
符合POSIX

我建议你听从本杰明的建议,做点什么

sed -e '/z/s_a_b_'

如果可能的话。

我不确定MKS sed的特性,但是
s_a_b
只是一个命令,POSIX sed将接受没有花括号的
/z/s_a_b_
。尝试插入
在右大括号之前,这修复了BSD sed中的一些问题。还有,为什么要使用下划线而不是斜杠?@Benjamin减少转义。下划线在分隔字符串中的出现频率低于斜杠。“我发现下划线使划界更加明显。”本杰明,插入;在闭合大括号修复它之前。因为使用;由于MKS-SED的命令分隔符没有文档记录,我认为HTNW是更好的解决方法。但是你暗示的“因为;丢失了”是最好的答案,所以请把它作为一个答案贴出来,让我勾选。@SLePort,这不需要将分隔符从斜杠改为斜杠。只有regexp或replacement中的斜杠可以。没有人看到>>它在MKS SED上工作,尽管“(使用多个-es将每个字符串连接在一起,中间有换行符)”是未记录的行为。谢谢。“他们说他们的sed符合POSIX标准”。他们暗示了这一点,但我想看看他们到底在哪里陈述。最后,在“可移植性”部分,他们说他们支持POSIX。动词“support”明显不存在:)是不确定的。鉴于上述目标,我看不出他们希望SED与POSIX兼容有什么好的理由,但他们并没有说它是兼容的,我想知道这是否也是出于好的理由。也就是说,它不是。
sed -e '/z/s_a_b_'