sed/gsed "잘못된 명령 코드.", "표현식 #1, 문자 1: 알 수 없는 명령: `.' "

sed/gsed "잘못된 명령 코드.", "표현식 #1, 문자 1: 알 수 없는 명령: `.' "

OS X sed와 gsed 모두에서 이와 유사한 오류가 발생했습니다. 명령 파일에서 표현식 1, 문자 1에 마침표가 포함되어 있지 않습니다. 유일한 위치는 "."입니다. 파일의 5번째 줄에 나타나며 이스케이프됩니다.

명령 파일은 다음과 같습니다.

#!/usr/local/bin/gsed -E
/^\s+/ d                        #trim leading spaces
/^$/ d                          #kill blank lines
s/([a-z])\n/\1 /                #unwrap text
s/([\.,;:]) (\w)/\1\r\2/        #CR at flow punctuation

여기서 어디로 가야할지 잘 모르겠습니다. OS X sed 및 gsed는 쉘 스크립트로 실행하든 -f를 사용하여 명령 파일을 읽든 동일한 방식으로 차단됩니다. SE 및 다른 곳에서 "알 수 없는 명령: '.'" 기형과 관련된 몇 가지 다른 문제가 발생했습니다. " 이러한 경우 오류 메시지에 인용된 문자의 위치가 잘못되었거나 Mac OS X의 -i 명령에 일반적으로 인수가 필요한데 -i 옵션을 사용하지 않았습니다.

답변1

#!/usr/local/bin/gsed -E

해야 한다:

#!/usr/local/bin/gsed -Ef

sed 코드가 해석되는 위치 가 아니라 sed -Ef /path/to/the/sed-script other arguments런타임에 실행되기를 원하기 때문입니다 .sed-script other argumentssed -E /path/to/the/sed-script other arguments/path/to/the/sed-script

/^\s+/ d                        #trim leading spaces

아니요, d현재 줄이 공백으로 분류된 하나 이상의 문자로 시작하면 삭제됩니다. 이러한 문자를 제거하고 줄을 유지하려면 다음과 같습니다.

 s/^\s+//

또는 동등한 표준:

 s/^[[:space:]]+//
 s/([a-z])\n/\1 /                #unwrap text

sed한 번에 한 줄씩 처리패턴 공간포함하다콘텐츠이러한 줄에는 줄 구분 기호가 포함되어 있지 않으므로 패턴 공간에 개행 문자가 포함되어 있지 않기 때문에 일치하지 않습니다.

또한 일치하는 문자는 [a-z]종종 무작위이며 로케일 설정의 영향을 받습니다.

 s/([\.,;:]) (\w)/\1\r\2/        #CR at flow punctuation

또한 [\.,;:]백슬래시 일치 항목도 확인하세요. 단지 일치시키려는 경우에는 ,;:을(를) [,;:]교체할 수도 있습니다.모두g이 플래그가 필요한 행에 나타납니다 .

당신이 원하는 소리는 다음과 같습니다.

#! /usr/bin/env perl
while (<<>>) { # reads one line into $_, includes the line delimiter
  s/^\s+//; # \n is also a \s so empty lines would be stripped in the process
  s/[a-z]\K\n//;
  s/([:;,]) +(\w)/\1\r\2/g;
  print;
}

관련 정보