ed 스크립트에 긴 줄을 더 짧은 줄로 나누는 명령을 추가합니다.

ed 스크립트에 긴 줄을 더 짧은 줄로 나누는 명령을 추가합니다.

문서에 매우 긴 줄이 있는 경우가 많으며 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

요약: 오류는 다음에 따라 다릅니다.

  1. #GNU가 아닌 언어에서는 주석 문자로 사용됩니다 ed.
  2. 먼저 버퍼를 저장하지 않고 GNU 편집 명령의 출력을 사용하십시오 ed.

반품:

  • H편집 스크립트 상단에 배치할 수 있는 매우 유용한 명령입니다.

GNU를 사용하면 ed내용이 한 줄만 있는 간단한 파일에 편집 스크립트를 적용해 보면 문제 없이 실행될 것입니다 hello world. 내 OpenBSD 시스템에서 이 컴퓨터를 사용할 때 ed오류가 발생합니다 ?.

H이 명령을 편집 스크립트 상단에 추가하면 더 자세한 오류가 가능해집니다. 이를 추가한 후 OpenBSD는 ed편집 스크립트의 12행에 대해 다음과 같이 불평했습니다 unknown command.

12행( H1행으로 추가된 경우)은 명령입니다.

# 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대체 또는 .wqQ

관련 정보