문서에 매우 긴 줄이 있는 경우가 많으며 ed
이를 최대 길이의 별도 줄로 분할하고 싶습니다. 이를 달성하기 위해 다음 명령을 찾았습니다.
fold -s -w80 file
다음과 같이 ed 내에서 이 명령을 적용할 수도 있습니다.
!fold -s -w80 %
그러나 이 명령을 내 ed 스크립트(다음 줄 포함)에 추가하면
g/\(‘‘\|’’\)/s//"/g
g/\(“\|”\)/s//"/g
g/\(‘\|’\)/s//'/g
g/\*/s///g
g/^#.*: /s///g
g/^ */s///
g/ *$/s///
g/ */s// /g
e !uniq %
e !fold -s -w80 %
# g/^$/d
w
Q
오류가 발생합니다. 오류의 원인과 해결방법을 알고 싶습니다.
답변1
요약: 오류는 다음에 따라 다릅니다.
#
GNU가 아닌 언어에서는 주석 문자로 사용됩니다ed
.- 먼저 버퍼를 저장하지 않고 GNU 편집 명령의 출력을 사용하십시오
ed
.
반품:
H
편집 스크립트 상단에 배치할 수 있는 매우 유용한 명령입니다.
GNU를 사용하면 ed
내용이 한 줄만 있는 간단한 파일에 편집 스크립트를 적용해 보면 문제 없이 실행될 것입니다 hello world
. 내 OpenBSD 시스템에서 이 컴퓨터를 사용할 때 ed
오류가 발생합니다 ?
.
H
이 명령을 편집 스크립트 상단에 추가하면 더 자세한 오류가 가능해집니다. 이를 추가한 후 OpenBSD는 ed
편집 스크립트의 12행에 대해 다음과 같이 불평했습니다 unknown command
.
12행( H
1행으로 추가된 경우)은 명령입니다.
# g/^$/d
in은 #
표준 ed
명령은 아니지만 GNU는 ed
이를 주석으로 처리하는 것 같습니다. BSD는 ed
다음을 수행하지 않습니다:
$ printf '%s\n' H '# hello' Q | ed -s
?
script, line 2: unknown command
$ printf '%s\n' H '# hello' Q | ged -s
(출력 없음)
그래서하나오류의 원인은 사용한 명령이 유효한 명령으로 ed
인식되지 않기 때문일 수 있습니다. #
이를 방지하려면 편집 스크립트에서 이 명령을 사용하지 마십시오.
표준에는 ed
주어진 명령을 무시할 수 있는 방법이 없습니다("주석 명령"이 없습니다).
오류가 발생할 수 있는 또 다른 이유는 버퍼를 편집했지만 저장하지 않은 상태에서 GNU를 사용하려고 하기 때문입니다 e !somecommand
.ed
H
다시 편집 스크립트 상단에 하나를 추가했지만 이제는 이전 명령 중 일부를 사용하여 수정된 문서를 사용합니다 e !uniq %
.
$ ged -s file <script
?
script, line 10: Warning: buffer modified
이 옵션을 사용할 때 BSD는 -s
버퍼에 저장되지 않은 변경 사항을 실행하기 ed
전에 경고를 발행하지 않습니다 .e !somecommand
uniq
및 의 출력을 편집하는 경우 fold
먼저 편집 버퍼가 디스크에 기록되었는지 확인해야 합니다! 와 가 모두 디스크에 있는 파일에 대해 fold
작업하기 때문에 이렇게 해야 합니다 .uniq
따라서 w
그 앞에 삽입하십시오.
g/\(‘‘\|’’\)/s//"/g
g/\(“\|”\)/s//"/g
g/\(‘\|’\)/s//'/g
g/\*/s///g
g/^#.*: /s///g
g/^ */s///
g/ *$/s///
g/ */s// /g
w
e !uniq %
w
e !fold -s -w80 %
w
Q
을( 를 ) uniq
결합 할 수도 있습니다.fold
w
e ! uniq % | fold -s -w80
또한 BSD와 GNU는 모두 ed
비표준 wq
대체 또는 .w
q
Q