'sed-e'和用分号

2021-02-20 17:32

分隔多个命令之间的区别我可能在这里挑刺,但如果能把这个一直困扰着我的问题一劳永逸地回答出来,那真是太好了reprex:一号线。一号线二号线三线要一致地向这个

解答动态

  • 让我们使用Sed POSIX标准来回答问题。
    分号周围的间距有什么实际的区别吗?
    除{…}、a、b、c、i、r、t、w、:、和#之外的编辑命令后面可以跟分号、可选空白字符和另一个编辑命令。
    Thus/^$/d;$!G不符合,但/^$/d;$!G是。但我确实想知道是否有任何现代Sed实现会无意中发现这一点。
    上面列出的三种语法之间是否存在任何真正的差异(普遍性、遵从性……)?
    No(除了分号前有空格的,如上所述)简介:
    sed[-n]脚本[文件…]sed[-n]-e脚本[-e脚本]。。。[-f脚本文件]。。。但是,请注意,正如前面提到的,有些命令后面不能跟分号,因此
    sed-e':a'-e's/x/y/'-e't a' 是兼容的,而
    sed':a;s/x/y;t a' 不是,但至少在GNU Sed中是一样的。
    我的直觉是,在命令行上同时使用-e和;(…)是多余的。我说的对吗?如果你参考问题中的例子,是的。如果只有一个-eoption,那么只要去掉它就可以了(除非同时使用-f选项(请参阅概要))。但是in
    sed-e':a'-e's/x/y;ta' 同时存在-e和;但它们不是冗余的。

    • 对于一些命令来说确实很重要。
      在最初的sed实现中,:foo;bar,b foo;bar,t foo;bar分别定义、分支、有条件地分支到foo;bar label.
      It甚至曾经是POSIX所要求的(我是要求放宽要求的人)。
      w foo;bar和r foo;bar在所有一致的实现中仍然要写入/读取foo;bar文件。
      #命令(用于注释)、a、I、c(append、insert、,change)显然不能跟在同一行上的另一个命令后面。
      历史sed实现不支持}跟在另一个命令后面。
      POSIX过去常说不能有;在}之前,虽然在实践中不需要这样做(我还要求放宽这一要求)。
      sed-e cmd1-e cmd2 意味着等同于2 sed-e'cmd1cmd2' ,但在实践中,并非所有的实现都是这样:
      sed-e'a\'-e'foo\'-e'bar'sed-e's/foo/bar\'-e'baz/g' 例如

      • End

      免责声明:

      本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。