sed распознает только часть последовательности HEX - PullRequest
0 голосов
/ 26 мая 2019

Наткнулся на странное поведение sed, когда распознается только часть последовательности HEX:

Есть строка со странными символами, которую я пытаюсь исправить, и при попытке замены HEX sed находит только первые три символа.

xxd вывод строки с проблемными символами:

6965 7261 f480 8488 6e6f 7761 6e61 2031 iera....nowana 1

Я хотел бы заменить эту последовательность f480 8488 на печатные символы, но sed может распознать только сначалатри:

sed 's/\xf4\x80\x84/00/g' | xxd
6965 7261 3030 886e 6f77 616e 6120 3136  iera00.nowana 16

f480 84 был правильно заменен на 3030

, однако

sed 's/\xf4\x80\x84\x88/00/g' | xxd
6965 7261 f480 8488 6e6f 7761 6e61 2031  iera....nowana 1

не находит f480 8488

Если я разобьюсь, если на два оператора sed sed 's/\xf4\x80/0/g' | sed 's/\x84\x88/0/g' все работает нормально

Я бы понял, если он ищет пары, но почему только три, а не четыре символа в последовательности?

1 Ответ

0 голосов
/ 26 мая 2019

После комментария @tripleee и подтвержденной формы решения @ the.Legend

Настройка LC_ALL=C - исправление. Это хорошо задокументировано здесь .

Это заставляет приложения использовать язык по умолчанию для вывода:

 $ LC_ALL=es_ES man 
 ¿Qué página de manual desea?

 $ LC_ALL=C man 
 What manual page do you want?
...