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

3개만 접근할 수 있어요현재의 ed구현:

  1. OpenBSD 7.0 ed( edNetBSD, FreeBSD 및 macOS와 유사하게 작동할 것으로 예상되지만 아직 철저하게 테스트하지 않았습니다).
  2. GNU ed1.14.2 및 1.16.
  3. 플랜 9는 ed에서 나옵니다 plan9port-20210323.

아래에 이들 간의 차이점을 요약하려고 노력했으며 "POSIX 호환 ed" 예상 동작(해야 할 일) 도 추가하려고 했습니다.POSIX 사양설명하다).

U&L 관련 질문/답변에서 제가 겪은 차이점들만 언급되어 있어 ed모든 것을 찾기 위해 매뉴얼 등에 대한 문헌 조사를 시도하지 않았습니다. 예를 들어, 대부분의 ed구현은 추가 명령 및/또는 명령줄 옵션을 통해 POSIX 표준에 대한 확장을 제공하며 ed, 이는 설명서에서 자명해야 하며 POSIX ed사양에는 표준화되지 않은 일부 명령도 언급되어 있습니다.

지원되는 정규식 변형은 부분적으로 시스템의 정규식 라이브러리에 따라 달라집니다. 이는 GNU 시스템의 표현식이 \`행의 시작 부분과 일치하지만( ^GNU ed(info-) 매뉴얼에 표시된 대로) edOpenBSD 시스템의 GNU는 이를 사용할 수 없음을 의미합니다. 그래서 나는 이것에 대해 더 많이 말하지 않을 것입니다.

다음은 몇 가지 다른 차이점입니다.

  • #코멘트 문자로.

    • GNU: #주석 명령입니다.
    • BSD: #유효한 명령이 아닙니다.
    • 계획 9: BSD와 같습니다.
    • POSIX: BSD와 같습니다.
  • 저장되지 않은 작업을 파기하는 행위.

    • GNU: e, e !, q버퍼가 저장되지 않으면 첫 번째 시도는 항상 실패합니다.
    • BSD: GNU와 비슷하지만 -s경고를 비활성화합니다.
    • 계획 9: GNU처럼.
    • POSIX: GNU와 같습니다.
  • 종료 상태(완전히 테스트하기가 약간 어렵습니다).

    • GNU: 마지막 명령으로 인해 오류가 발생한 경우 0이 아닌 종료 상태로 종료됩니다.
    • BSD: 대부분의 버그는 0이 아닌 종료만을 발생시킵니다 -s.
    • 계획 9: 0이 아닌 종료 상태로 종료되지 않는 것 같습니다.
    • POSIX: 종료 상태가 0인 종료는 "파일이나 명령 오류 없이 성공적으로 완료됨"을 의미합니다.
  • 명령은 s///있지만 첫 번째 명령만 /.

    • GNU: s/RE버그입니다.
    • BSD: s/RE동작은 와 유사합니다 s/RE/. 즉 s/RE//p, RE 정규식과 일치하는 하위 문자열을 빈 문자열로 바꾸고 수정된 줄을 인쇄합니다.
    • 계획 9: BSD와 같습니다.
    • POSIX: GNU와 같습니다.
  • ^주소 로 사용됩니다 .

    • GNU: ^잘못된 주소입니다.
    • BSD : ^.-
    • 계획 9: BSD와 같습니다.
    • POSIX : ^.-
  • 인쇄 명령 p, ln(예: )을 결합하고 nl그 동안 명령(예: nlnl또는 pnnn) 을 반복합니다.

    • GNU: 인쇄 명령 결합을 허용합니다. 중복 명령은 허용되지 않습니다(단, 표준에서는 , , , , , , 또는 이외의 명령 에 , 또는 추가를 허용하므로 pp, nn및 사용은 허용됩니다 ).llpnleEfqQrw!
    • BSD: 인쇄 명령 결합을 허용합니다. 반복된 명령이 허용됩니다.
    • 옵션 9: 세 가지 명령 중 두 가지 명령의 조합을 허용합니다( 는 아님 nlp). 중복된 명령은 허용되지 않습니다.
    • POSIX: 인쇄 명령 결합의 효과는 "지정되지 않음"입니다.
  • ed.hupHUP 신호를 수신한 후 현재 편집 버퍼는 현재 디렉터리에서 호출되는 파일 에 저장됩니다 . 실패하면 버퍼가 기록됩니다 $HOME/ed.hup. 이러한 이름이 이미 존재하는 경우 어떻게 되나요?

    • GNU: 현재 디렉토리의 파일이 ed.hup일반 파일이고 현재 사용자가 소유한 경우 덮어쓰여집니다. 그렇지 않고 $HOME/ed.hup파일이 현재 사용자가 소유한 일반 파일인 경우 해당 파일을 덮어씁니다. 그렇지 않으면 버퍼가 손실됩니다.
    • BSD: GNU와 비슷하지만 현재 버퍼는 이름이 일치하는 임시 파일에서도 사용할 수 있습니다 /tmp/ed.*.
    • 계획 9: GNU처럼.
    • POSIX: GNU와 같습니다.

관련 정보