2014-11-27 2 views
2

Я пытаюсь исправить ошибку кодирования на заархивированной странице html. Моя проблема в том, что sed ведет себя странно, так как он не захватывает специальные символы в данных. Я пробовал как с ключом, так и без него.SED grabbing специальные символы

Мои данные следующие: Budapesti ??p?­t?©szeti Filmnapok k??l??nkiad??s

СЕПГ Команда:

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

и результат я получаю без Recode:

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

В результате я м ожидается:

REPLACE

Кажется, что это связано с кодировкой. Если я сначала сделаю recode iso-8859-2 index.html, sed отлично работает и получит ожидаемый результат.

Вот шестигранные байт для i ??p?­t?Šs части до того Recode:

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

и после Recode:

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

Кстати, это то, что я получаю без Recode:

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 и шестнадцатеричный код файла на проблемные символы. – 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 мой останавливается в AD, поэтому не уверен –

+0

Я имею в виду, что 3F - последний символ, который исчезает, и AD - это первый, который остается. – zsero

Смежные вопросы