как я могу изменить этот файл & ldquo; ip_local_port_range & rdquo ;?

Символы M-BM- представляют собой ASCII-представление последовательности байтов 0xc2 0xa0, которая является кодировкой UTF8 символа юникода A0 - неразрывным символом пробела. Этот символ может быть вставлен в документы LibreOffice и Microsoft Word, используя последовательность клавиш Ctrl + Shift + SPACE.

Например, если мы создадим новый .odt-документ в LibreOffice и наберите ABC Ctrl + Shift + Shift DEF, затем Save As... Text (игнорируя предупреждение о том, что документ может содержать функции, которые не могут быть сохранены в этом формате), затем просмотрите полученный .txt файл с помощью cat: [ ! d4]

$ cat nbsp.txt 
ABC DEF

, а затем снова с переключателем -v для отображения непечатаемых символов

$ cat -v nbsp.txt 
M-oM-;M-?ABCM-BM- DEF

Обратите внимание, что мы также получаем начальную последовательность M-oM-;M-? или шестнадцатеричную 0xef 0xbb 0xbf, которая является меткой порядка байтов UTF8 (BOM), согласующейся с типом файла, сообщенным командой file, т. е.

$ file nbsp.txt 
nbsp.txt: UTF-8 Unicode (with BOM) text
[!d13 ]

Используя od для печати шестнадцатеричных значений в порядке байтов, мы видим

$ od -tx1 nbsp.txt
0000000 ef bb bf 41 42 43 c2 a0 44 45 46 0a
0000014

. Эти символы можно манипулировать с помощью стандартных инструментов, таких как sed или tr, указав шестнадцатеричные коды как escape-последовательности, например заменить неиспользуемое пространство простым пространством ASCII

$ sed 's/\xc2\xa0/ /g' nbsp.txt
ABC DEF

Повторная проверка с помощью od подтверждает замену обычным пространством ASCII 0x20 (десятичное число 32)

$ sed 's/\xc2\xa0/ /g' nbsp.txt | od -tx1
0000000 ef bb bf 41 42 43 20 44 45 46 0a
0000013

В gnome-терминале (и, возможно, других эмуляторах терминала, поддерживающих UTF8), также можно ввести значение кодовой точки Юникода непосредственно с помощью последовательности клавиш Shift [ ! d6] + Shift + SPACE , за которым следует шестнадцатеричное значение, затем клавиша Enter - последовательность отображается сначала как u ... но затем символ должен составлять, когда вы нажимаете Enter, например, для той же незаменимой замены пространства мы можем сделать

$ sed 's/Ctrl+Shift+ua0

, который отображается как

$ sed 's/̲/̲u̲a̲0̲

, а затем завершается как

$ sed 's/ / /g' nbsp.txt
ABC DEF

Используя cat -v, мы можем подтвердить, что последовательность M-BM- стала обычным пространством

$ sed 's/ / /g' nbsp.txt | cat -v
M-oM-;M-?ABC DEF

Вы можете захотеть посмотрите на более общие кодирующие преобразователи, такие как значение кодовой точки и uconv.

1
задан 12 October 2015 в 15:10

0 ответов

Другие вопросы по тегам:

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