Почему sed перестал работать с Международными символами и как зафиксировать?

Вы можете написать variable += 1 в строке выше. Реализуйте preincrement, увеличивая, до.

15
задан Chris Upchurch 8 April 2009 в 19:31
поделиться

2 ответа

Я думаю, что ошибка происходит, если входное кодирование файла отличается от предпочтительного кодирования Вашей среды.

Пример: 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.

24
ответ дан 1 December 2019 в 01:39
поделиться

sed не очень хорошо установка для текста не в формате ASCII. Однако можно использовать (почти) тот же код в perl и получить результат, который Вы хотите:

perl -pe 's/.*\| //' x
10
ответ дан 1 December 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: