1

Итак, для моего класса статистики я использовал много хитрости Linux, чтобы упорядочить свои числа, копировать / вставлять их и т.д. Теперь у меня не было проблем до недавнего времени ... Копия вставила кучу значений из Open Office (может быть виновником), и пыталась отформатировать их так ...

echo "5  8  6  25  4  21  10  1  24  12  4  16  
9  2  12  28  14  17  12  1  16  18  18  3  
12  6  6  12  10  20  9  6  8  6  8  15" | sed 's/\s\+/\n/g' | grep -v ^$ | sed 's/[[:space:]]*$//g' > test.txt

Это поместило бы каждое число в отдельную строку, но когда я вставил его в statdisk, я получил несколько недопустимых ошибок символов. Кажется, это был пробел, но я попытался использовать sed и tr с вариациями на [:space:], [:blank:] и такими вещами, как s/[\t] * $//g, чтобы попытаться удалить все, что тянулось в конце (который я мог бы просто удалить в Vim). Но ничего на CLI не сработало.

Запуск hexdump для этого файла дает мне

5   �   �  \n   8   �   �  \n   6   �   �  \n   2   5   �   �

Какого черта это? hexdump -C

35 c2 a0 0a 38 c2 a0 0a  36 c2 a0 0a 32 35 c2 a0  |5...8...6...25..|

У кого-нибудь есть идеи, что это за байты c2 a0? Есть ли простой / элегантный способ обстреливать их с помощью sed, tr или чего-то еще? Или, будучи не ascii, мне нужно сделать что-то умное с манипулированием байтами ... Есть мысли / предложения?

1 ответ1

1

c2a0 - это UTF-8 U+00A0, пространство без разрывов . Вы можете легко использовать tr чтобы удалить их, например,

> echo -n $'5\u00a0 8\u00a0 6' | tr -d $'\u00a0' | xxd
00000000: 3520 3820 36                             5 8 6

Обратите внимание, что escape \u работает только в Bash 4.2+, но вы можете заменить его на $'\xc2\xa0' .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .