2014-11-27 3 views
2

보관 된 HTML 페이지에서 인코딩 오류를 수정하려고합니다. 내 문제는 데이터가 특수 문자를 잡아 내지 않아서 sed가 이상하게 작동한다는 것입니다. 나는 -r 스위치 사용 여부에 관계없이 모두 시도했다.SED 잡아 특수 문자

내 데이터는 다음 Budapesti ??p?­t?©szeti Filmnapok k??l??nkiad??s

Sed의 명령

REPLACE�t?�szeti Filmnapok k??l??nkiad??s

나 '결과를 : 나는 레코딩하지 않고 얻을

sed -i.bak 's|Budapesti.*|REPLACE|g' index.html

및 결과 기대하는 것은 :

REPLACE

어떻게 든 인코딩과 관련이있는 것으로 보입니다. recode iso-8859-2 index.html을 먼저 실행하면 sed가 정상적으로 작동하고 예상되는 결과를 얻습니다. 여기

는 레코딩하기 전에 i ??p?­t?Šs 부분에 대한 진수 바이트 :

69 20 3F 3F 70 3F AD 74 3F A9 73

및 레코딩 후 :

69 20 3F 3F 70 3F C2 AD 74 3F C5 A0 73

BTW, 이것이 내가 레코딩하지 않고 무엇을 얻을 :

REPLACE­t?Šs 52 45 50 4C 41 43 45 AD 74 3F A9 73

최신 gsed (GNU sed) 4.2.2를 사용하고 있습니다.

+2

당신은 무엇 출력을 기대합니까? – anubhava

+1

첫 번째 명령은 저에게 효과적입니다. –

+0

인코딩과 관련이있는 것 같습니다. recode 명령과 문제가있는 문자의 파일에 대한 16 진 코드를 포함하여 질문에 더 많은 정보를 추가했습니다. – zsero

답변

1
LANG=C.ISO-8859-2 sed -i.bak 's|Budapesti.*|REPLACE|g' index.html 

Cygwin terminal not displaying certain characters?

+0

이 코드는 제대로 작동하지만 인코딩이 설정되지 않은 상태에서 sed가 3F 문자를 멈추게하는 이유는 무엇입니까? – zsero

+0

@zsero 광산은 광고에서 멈춘다. 그래서 확실하지 않다 –

+0

나는 3F가 사라지는 마지막 문자 인 것을 의미한다. 그리고 광고는 머무르는 첫번째 사람이다. – zsero