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 arguments
sed -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;
}