在sed中使用分号作为命令分隔符有多便携?

时间:2011-06-08 14:41:24

标签: sed

在sed中,使用由分号分隔的多个命令是相当普遍的:

$ sed -e '/re/{s//replace/p; q;}

但是,标准(例如http://pubs.opengroup.org/onlinepubs/9699919799/)仅允许 换行符作为分隔符:

$ sed -e '/re/{
    s//replace/p
    q
}

是否仍有许多常见的sed实现仍在使用,不允许使用分号? IOW,一个打算便携的sed脚本可以使用分号吗?

3 个答案:

答案 0 :(得分:5)

来自the POSIX specification of sed

  

{ a b c 以外的命令动词>, r t w 可以跟踪通过<semicolon>,   可选的<blank>个字符和另一个命令动词。但是,当 s 命令动词与 w 标志一起使用时,以这种方式使用另一个命令跟随它会产生未定义的结果。

因此除了上面提到的那些命令之外,大多数命令都可以用分号分隔。

/[^\{abcirtw:#];[[:space:]]*/: - )

答案 1 :(得分:3)

棘手的......我只能在sed-faq chapter 6.8.1

中找到关于此的参考资料
  

大多数版本的sed允许在上面发出多个命令     命令行,以分号(;)分隔。

对于;无效的唯一提法是HHSED,请参阅Chapter 7

答案 2 :(得分:1)

GNU sed似乎允许在MacOS X(BSD)sed没有的几个地方使用分号。我现在没有触手可及的细节,但有几次我不得不修改答案,让它们在Mac上正常工作。问题可能是括号内的命令序列。