Недопустимые символы не видны в BASH

Я работал на каком-то устройстве, которое позволяло входить через telnet, и я извлек некоторые данные с устройств и сделал несколько отчетов без каких-либо проблем. недавно мне пришлось переключиться на SSH, в то время как остальная часть сценария все та же, только процедура входа была изменена с telnet на SSH. после переключения на SSH я столкнулся с некоторой проблемой с извлеченными данными, что в некоторых строках есть недопустимые символы, ниже приведен пример: как видно, в строке после PON7 есть недопустимый символ:

OLT:LT6.PON7.ONT1,ALARM,Date time,

проблема в том, что этот недопустимый символ даже не виден в файле bash / csv, но он был обнаружен, когда я скопировал строку в notepad++ или разместил ее здесь.

Теперь у меня есть две проблемы: 1-й: если кто-то знает, что вызывает эти недопустимые символы при переключении между telnet/ssh. 2-й: как бороться с этим недопустимым символом в BASH, поскольку он даже не виден в BASH, но этот отчет где-то используется, и эти недопустимые символы вызывают проблемы.

Редактировать:

Вставка текста в преобразователь текста в шестнадцатеричный код приводит к следующему:

4f 4c 54 3a 4c 54 36 2e 50 4f 4e 37 11 2e 4f 4e 54 31 2c 41 4c 41 52 4d 2c 44 61 74 65 20 74 69 6d 65 2c

Похоже, что есть символ DC1 (шестнадцатеричный 11) между "7" и ".".

К сожалению, у этого редактирования также есть побочный эффект удаления символа из образца текста.

1 ответ

Решение

Передача текста через текст в шестнадцатеричный преобразователь показывает, что невидимый символ является символом ASCII DC1 (шестнадцатеричное 11, восьмеричное 021). Этот символ также известен как Ctrl-Q или XON. Это иногда используется в управлении потоком.

В скрипте bash вы можете отфильтровать его, используя tr программа:

echo $badtext | tr -d '\021'

SSH по сути не вставляет символы DC1 в текстовые потоки. Если вы получаете символ DC1 на выходе устройства, возможно, устройство отправило этот символ.

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