문제

GNU sed 버전 4.1.5는 국제 문자에서 실패하는 것 같습니다.내 입력 파일은 다음과 같습니다.

Gras och Stenar Trad -Moja에서 Minneapolis DVD까지 [G2007DVD] 7812 | 엑스
Gras och Stenar Trad -Möja에서 미니애폴리스 DVD까지 [G2007DVD] 7812 | 와이

(두 번째 줄의 움라우트에 주목하세요.)

그리고 내가 할 때

sed 's /.* | // '<in

나는 '|'까지 모든 숯을 제거하도록 요청했기 때문에 X와 Y 만 볼 것으로 예상됩니다. 그리고 그 너머의 공간.대신 다음을 얻습니다.

엑스
Gras Och Stenar Trad - M에서?와이

tr을 사용하여 국제 문자를 제거할 수 있다는 것을 알고 있습니다.먼저, sed를 사용할 수 있는 방법이 있나요?

도움이 되었습니까?

해결책

파일의 입력 인코딩이 사용자 환경의 기본 인코딩과 다르면 오류가 발생한다고 생각합니다.

예: in UTF-8입니다

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

UTF-8은 ISO-8859-1로 안전하게 해석될 수 있습니다. 이상한 문자가 표시되지만 그 외에는 모든 것이 정상입니다.

예: in ISO-8859-1입니다

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Gras Och Stenar Trad - From MöY
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

ISO-8859-1은 UTF-8로 해석될 수 없으며 입력 파일 디코딩에 실패합니다.이상한 일치는 아마도 sed가 완전히 실패하는 대신 복구를 시도한다는 사실 때문일 것입니다.

대답은 Debian Lenny/Sid 및 sed 4.1.5를 기반으로 합니다.

다른 팁

sed ASCII가 아닌 텍스트에는 잘 설정되지 않았습니다.그러나 다음에서 (거의) 동일한 코드를 사용할 수 있습니다. perl 원하는 결과를 얻으십시오.

perl -pe 's/.*\| //' x
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top