BASH 中不可见的无效字符

invalid characters not visible in BASH

我一直在研究一些允许通过 telnet 登录的设备,我从设备中提取了一些数据并做了一些报告,没有任何问题。最近,我不得不切换到 SSH,而脚本的其余部分都是一样的,只有登录过程从 telnet 更改为 SSH。切换到 SSH 后,我在提取数据时遇到一些问题,有些行中有一些无效字符,下面是一个示例:可以看出,行中 PON7 之后有一个无效字符:

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

问题是这个无效字符在 bash/csv 文件中甚至不可见,但当我在记事本++中复制该行或在此处发布时发现了它。

现在我有两个问题: 第一:如果有人知道在 telnet/ssh 之间切换时导致这些无效字符的原因。 第二:如何处理 BASH 中的这个无效字符,因为它在 BASH 中甚至不可见,但是这个报告正在某处使用,这些无效字符导致了问题。

编辑:

将文本粘贴到 text-to-hex converter 中会产生:

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)。

不幸的是,此编辑还具有从示例文本中删除字符的副作用。

通过 text to hexadecimal converter shows that the invisible character is an ASCII DC1 character(十六进制 11,八进制 021)传递您的文本。此字符也称为 Ctrl-Q 或 XON。它有时用于流量控制。

在 bash 脚本中,您可以使用 tr 程序将其过滤掉:

echo $badtext | tr -d '1'

SSH 本身不会将 DC1 字符插入文本流。如果您在设备的输出中获得 DC1 字符,则可能是设备发送了该字符。