Я работал над некоторым устройством, которое позволяло вход через telnet, и я извлек некоторые данные с устройств и сделал несколько отчетов без каких-либо проблем. недавно мне пришлось переключиться на SSH, в то время как остальная часть скрипта все та же, только процедура входа в систему была изменена с telnet на SSH. после переключения на SSH у меня возникла проблема с извлеченными данными, что в некоторых строках есть недопустимые символы, ниже приведен пример: как можно видеть, после PON7 в строке есть недопустимый символ:
OLT:LT6.PON7.ONT1,ALARM,Date time,
Проблема в том, что этот недопустимый символ даже не виден в файле bash / csv, но он был обнаружен, когда я скопировал строку в блокноте ++ или разместил ее здесь.
теперь у меня две проблемы: 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
Похоже, что между «7» и «.» Есть символ DC1 (шестнадцатеричный 11).
К сожалению, это редактирование также имеет побочный эффект - удаление символа из образца текста.
Передача вашего текста через преобразователь текста в шестнадцатеричный показывает, что невидимым символом является ASCII DC1 символ (шестнадцатеричный 11, восьмеричный 021). Этот символ также известен как Ctrl-Q или XON. Иногда это используется для управления потоком.
В сценарии bash вы можете отфильтровать его с помощью программы tr
:
echo $badtext | tr -d '\021'
SSH по своей сути не вставляет символы DC1 в текстовые потоки. Если вы получаете символ DC1 на выходе с устройства, предположительно устройство отправило этот символ.
да, есть символ DC1, и кажется, что само устройство отправляет этот символ, но проблема в том, что мне нужно только отфильтровать этот символ из вывода, сохраняя при этом всю строку нетронутой, я попытаюсь использовать sed, чтобы обойти эту проблему, если вы можете что-то предложить, пожалуйста, сделайте
Если вам нужна помощь в добавлении фильтра к существующему сценарию, вы должны включить в свой вопрос соответствующую часть существующего сценария.
Я думаю, что вашего вышеупомянутого комментария будет достаточно, я повторил текст и перевел его, как вы предлагали, в следующем отчете я подтвердю это. на самом деле эти устройства используют язык TL1 (типичный язык для телекоммуникационного оборудования) и, возможно, этот символ DC1 присутствовал все время, но не уверен, почему он не создавал никаких проблем при использовании telnet.
ниже - часть кода, где я добавил перевод, как вы предложили, но все же я вижу символ DC1 на выходе. echo "$ONTID,$ALM,$COMBDate,$INVDATA" | tr -d '\017'
Я неправильно прочитал таблица ascii. Должен быть ... | tr -d '\021'
Есть ли способ удалить это и все недопустимые символы из собственных файлов? Я имею в виду, что прежде чем выполнять остальную обработку файла, я бы хотел удалить эти символы, или, если есть способ заблокировать сохранение этих символов в файле в первую очередь ... Я могу поделиться своей структурой сценария, которая Я использую для входа в систему и извлечения данных с устройств, если требуется,
недопустимый символ был виден при публикации здесь, но после того, как я разместил вопрос, он больше не отображается. Как я могу поделиться фактическим текстом?