Символы 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.