недопустимые символы не видны в BASH - PullRequest
0 голосов
/ 01 мая 2018

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

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

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

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

Edit:

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

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 Ответ

0 голосов
/ 01 мая 2018

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

В скрипте bash вы можете отфильтровать его с помощью программы tr:

echo $badtext | tr -d '\021'

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

...