Gnu Ed 和 Unix 附带的 Ed 版本有什么区别?

Gnu Ed 和 Unix 附带的 Ed 版本有什么区别?

我想知道 Gnu Ed 和 BSD Unix 系统附带的 Ed 版本之间有什么功能差异吗?我目前在 Debian 10 上使用 Gnu Ed 1.17,但发现了这个页面:

https://man.openbsd.org/ed

手册页似乎有所不同:

https://www.gnu.org/software/ed/manual/ed_manual.html

答案1

我只能访问三个当前的 ed实施:

  1. OpenBSD 7.0 ed(预计其行为类似于edNetBSD、FreeBSD 和 macOS,但我尚未对此进行彻底测试)。
  2. GNU ed1.14.2 和 1.16。
  3. 计划 9ed来自plan9port-20210323.

我试图总结下面这些之间的差异,并且我还尝试添加一些“符合 POSIX 标准ed”的预期行为(按照什么进行)POSIX 规范说)。

仅提到了我在 U&L 上的相关问题/答案中遇到的差异ed,因此我没有尝试对手册等进行文献研究来查找所有内容。例如,大多数ed实现通过额外的命令和/或命令行选项提供对 POSIXed标准的扩展,这在其手册中应该是不言而喻的,并且 POSIXed规范还提到了一些从未标准化的命令。

支持的正则表达式变体部分取决于系统的正则表达式库。这意味着 GNU 系统上的表达式\`将匹配行的开头(就像^GNU ed(info-) 手册中所示),而edOpenBSD 系统上的 GNU 将无法使用它。所以这个我就不多说了。

这些是其他一些差异:

  • #作为评论字符。

    • GNU: #是一个注释命令。
    • BSD: #不是有效命令。
    • 计划 9:像 BSD 一样。
    • POSIX:像 BSD。
  • 破坏未保存工作的行为。

    • GNU: ee !q如果缓冲区未保存,则第一次尝试总是失败。
    • BSD:与 GNU 类似,但使用-s会禁用警告。
    • 计划 9:像 GNU 一样。
    • POSIX:就像 GNU 一样。
  • 退出状态(这有点难以彻底测试)。

    • GNU:如果最后一个命令导致错误,则以非零退出状态终止。
    • BSD:大多数错误仅导致非零终止-s
    • 计划 9:似乎永远不会以非零退出状态终止。
    • POSIX:退出状态为零的终止意味着“成功完成,没有任何文件或命令错误”。
  • s///命令,但只有第一个/.

    • GNU: s/RE是一个错误。
    • BSD: s/RE行为类似于s/RE/,与 相同s/RE//p,即将RE 与正则表达式匹配的子字符串替换为空,并打印修改后的行。
    • 计划 9:像 BSD 一样。
    • POSIX:就像 GNU 一样。
  • 用作^地址。

    • GNU: ^是一个无效地址。
    • BSD: ^寻址前一行,就像-.
    • 计划 9:像 BSD 一样。
    • POSIX:允许^-.
  • 组合打印命令pln(如nl),并在执行此操作时重复命令(如nlnlpnnn)。

    • GNU:允许组合打印命令。不允许重复命令(尽管允许使用ppnn、 和 ,ll因为标准允许将pn、 或添加l到除eEfqQ、 、rw或之外的命令中!)。
    • BSD:允许组合打印命令。允许重复命令。
    • 方案 9:允许三个命令中的两个命令的组合(不是nlp)。不允许重复命令。
    • POSIX:组合打印命令的效果是“未指定的”。
  • 收到 HUP 信号后,当前编辑缓冲区将保存在ed.hup当前目录中调用的文件中。如果失败,缓冲区将被写入$HOME/ed.hup。如果这些名称已经存在会发生什么?

    • GNU:如果当前目录中的文件ed.hup是常规文件并且由当前用户拥有,则该文件将被覆盖。否则,$HOME/ed.hup如果该文件是当前用户拥有的常规文件,则该文件将被覆盖。否则,缓冲区就会丢失。
    • BSD:与 GNU 类似,但当前缓冲区也可在名称与 . 匹配的临时文件中使用/tmp/ed.*
    • 计划 9:像 GNU 一样。
    • POSIX:就像 GNU 一样。

相关内容