Ed

Gnu Ed 和 Unix 附帶的 Ed 版本有什麼區別?

  • April 3, 2022

我想知道 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

我只能訪問三個目前的 ed實現:

  1. OpenBSD 7.0 ed(預計ed在 NetBSD、FreeBSD 和 macOS 上表現得像,但我還沒有徹底測試過)。
  2. GNU ed1.14.2 和 1.16。
  3. 計劃 9edplan9port-20210323.

我試圖在下面總結這些之間的差異,並且我還嘗試添加一些“符合 POSIX 標準ed”的預期行為(按照 POSIX 規範所說的)。

這裡只提到了我在U&L上的相關問題/答案中遇到的差異ed,所以我沒有嘗試對手冊等進行文獻研究,以找到所有內容。例如,大多數ed實現通過額外的命令和/或命令行選項提供對 POSIX 標準的擴展,ed這在其手冊中應該是不言而喻的,並且 POSIXed規範還提到了一些從未標準化的命令。

支持的正則表達式變體部分取決於系統的正則表達式庫。這意味著 GNU 系統上的表達式將匹配 GNU (info-) 手冊中所示\``的行首(就像),而OpenBSD 系統上的 GNU 將無法使用它。所以我不會多說這個。^eded`

這些是其他一些差異:

  • #作為評論角色。

    • GNU: #是一個註釋命令。
    • BSD: #不是一個有效的命令。
    • 計劃 9:像 BSD。
    • POSIX:就像 BSD。
  • 破壞未保存工作的行為。

    • GNU: e, e !,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:允許組合列印命令。不允許重複的命令(儘管pp,nnll是允許的,因為標准允許將p, n, or添加l到除e, E, f, q, Q, r, w, or之外的命令中!)。
    • BSD:允許組合列印命令。允許重複命令。
    • 計劃 9:允許三個命令中的兩個命令的組合(不允許nlp)。不允許重複命令。
    • POSIX:組合列印命令的效果是“未指定的”。
  • 接收到 HUP 信號後,目前編輯緩衝區保存在ed.hup目前目錄中呼叫的文件中。如果失敗,則將緩衝區寫入$HOME/ed.hup. 如果這些名稱已經存在會怎樣?

    • GNU:如果ed.hup目前目錄中的文件是正常文件並且歸目前使用者所有,則該文件將被覆蓋。否則,$HOME/ed.hup如果該文件是目前使用者擁有的正常文件,則該文件將被覆蓋。否則,緩衝區將失去。
    • BSD:與 GNU 類似,但目前緩衝區也可以在名稱匹配的臨時文件中使用/tmp/ed.*
    • 計劃 9:像 GNU。
    • POSIX:就像 GNU。

引用自:https://unix.stackexchange.com/questions/657459