Недействительные символы, не видимые в BASH

Я работал над некоторым устройством, которое позволяло вход через 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).

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

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

Ibraheem 01.05.2018 21:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
763
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

echo $badtext | tr -d '\021'

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

да, есть символ DC1, и кажется, что само устройство отправляет этот символ, но проблема в том, что мне нужно только отфильтровать этот символ из вывода, сохраняя при этом всю строку нетронутой, я попытаюсь использовать sed, чтобы обойти эту проблему, если вы можете что-то предложить, пожалуйста, сделайте

Ibraheem 01.05.2018 22:24

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

Kenster 01.05.2018 22:26

Я думаю, что вашего вышеупомянутого комментария будет достаточно, я повторил текст и перевел его, как вы предлагали, в следующем отчете я подтвердю это. на самом деле эти устройства используют язык TL1 (типичный язык для телекоммуникационного оборудования) и, возможно, этот символ DC1 присутствовал все время, но не уверен, почему он не создавал никаких проблем при использовании telnet.

Ibraheem 01.05.2018 22:33

ниже - часть кода, где я добавил перевод, как вы предложили, но все же я вижу символ DC1 на выходе. echo "$ONTID,$ALM,$COMBDate,$INVDATA" | tr -d '\017'

Ibraheem 01.05.2018 22:39

Я неправильно прочитал таблица ascii. Должен быть ... | tr -d '\021'

Kenster 01.05.2018 22:42

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

Ibraheem 05.05.2018 15:04

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