Gnu Ed와 BSD Unix 시스템과 함께 제공되는 Ed 버전 사이에 기능적 차이가 있는지 알고 싶습니다. 저는 현재 Debian 10에서 Gnu Ed 1.17을 사용하고 있는데 다음 페이지를 발견했습니다:
매뉴얼 페이지가 다른 것 같습니다.
답변1
3개만 접근할 수 있어요현재의 ed
구현:
- OpenBSD 7.0
ed
(ed
NetBSD, FreeBSD 및 macOS와 유사하게 작동할 것으로 예상되지만 아직 철저하게 테스트하지 않았습니다). - GNU
ed
1.14.2 및 1.16. - 플랜 9는
ed
에서 나옵니다plan9port-20210323
.
아래에 이들 간의 차이점을 요약하려고 노력했으며 "POSIX 호환 ed
" 예상 동작(해야 할 일) 도 추가하려고 했습니다.POSIX 사양설명하다).
U&L 관련 질문/답변에서 제가 겪은 차이점들만 언급되어 있어 ed
모든 것을 찾기 위해 매뉴얼 등에 대한 문헌 조사를 시도하지 않았습니다. 예를 들어, 대부분의 ed
구현은 추가 명령 및/또는 명령줄 옵션을 통해 POSIX 표준에 대한 확장을 제공하며 ed
, 이는 설명서에서 자명해야 하며 POSIX ed
사양에는 표준화되지 않은 일부 명령도 언급되어 있습니다.
지원되는 정규식 변형은 부분적으로 시스템의 정규식 라이브러리에 따라 달라집니다. 이는 GNU 시스템의 표현식이 \`
행의 시작 부분과 일치하지만( ^
GNU ed
(info-) 매뉴얼에 표시된 대로) ed
OpenBSD 시스템의 GNU는 이를 사용할 수 없음을 의미합니다. 그래서 나는 이것에 대해 더 많이 말하지 않을 것입니다.
다음은 몇 가지 다른 차이점입니다.
#
코멘트 문자로.- GNU:
#
주석 명령입니다. - BSD:
#
유효한 명령이 아닙니다. - 계획 9: BSD와 같습니다.
- POSIX: BSD와 같습니다.
- GNU:
저장되지 않은 작업을 파기하는 행위.
- GNU:
e
,e !
,q
버퍼가 저장되지 않으면 첫 번째 시도는 항상 실패합니다. - BSD: GNU와 비슷하지만
-s
경고를 비활성화합니다. - 계획 9: GNU처럼.
- POSIX: GNU와 같습니다.
- 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:
^
주소 로 사용됩니다 .- GNU:
^
잘못된 주소입니다. - BSD :
^
.-
- 계획 9: BSD와 같습니다.
- POSIX :
^
.-
- GNU:
인쇄 명령
p
,l
및n
(예: )을 결합하고nl
그 동안 명령(예:nlnl
또는pnnn
) 을 반복합니다.- GNU: 인쇄 명령 결합을 허용합니다. 중복 명령은 허용되지 않습니다(단, 표준에서는 , , , , , , 또는 이외의 명령 에 , 또는 추가를 허용하므로
pp
,nn
및 사용은 허용됩니다 ).ll
p
n
l
e
E
f
q
Q
r
w
!
- BSD: 인쇄 명령 결합을 허용합니다. 반복된 명령이 허용됩니다.
- 옵션 9: 세 가지 명령 중 두 가지 명령의 조합을 허용합니다( 는 아님
nlp
). 중복된 명령은 허용되지 않습니다. - POSIX: 인쇄 명령 결합의 효과는 "지정되지 않음"입니다.
- GNU: 인쇄 명령 결합을 허용합니다. 중복 명령은 허용되지 않습니다(단, 표준에서는 , , , , , , 또는 이외의 명령 에 , 또는 추가를 허용하므로
ed.hup
HUP 신호를 수신한 후 현재 편집 버퍼는 현재 디렉터리에서 호출되는 파일 에 저장됩니다 . 실패하면 버퍼가 기록됩니다$HOME/ed.hup
. 이러한 이름이 이미 존재하는 경우 어떻게 되나요?- GNU: 현재 디렉토리의 파일이
ed.hup
일반 파일이고 현재 사용자가 소유한 경우 덮어쓰여집니다. 그렇지 않고$HOME/ed.hup
파일이 현재 사용자가 소유한 일반 파일인 경우 해당 파일을 덮어씁니다. 그렇지 않으면 버퍼가 손실됩니다. - BSD: GNU와 비슷하지만 현재 버퍼는 이름이 일치하는 임시 파일에서도 사용할 수 있습니다
/tmp/ed.*
. - 계획 9: GNU처럼.
- POSIX: GNU와 같습니다.
- GNU: 현재 디렉토리의 파일이