使用 ssh.net 长文本执行命令 如何解析此退格键?

executing command using ssh.net long text how parse this backspaces?

我有一些大型项目通过 SSH.NET

连接到许多设备

我有一些问题,当我做 shells.Read() 并且输出有一些长行时,我得到的输出像

"description <XC descritption long , id123123123 IP:120.120.120.20 VC\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b$ <XC descritption long, id123123123  IP:120.120.120.20 VCI         \b\b\b\b\b\b\b\b\bD:2500\r\ndescription <XC descritption long, id123123123  IP:120.120.120.20 VCID:2500\r\n  ^\r\n% Invalid input detected at '^' marker.\r\n\r\ngateway2#"

我在谷歌上搜索了一下,发现如果它不适合这个'virtual terminal window'的一行,它是一种发送长行输出的方法?

我的问题是如何以编程方式解析它 没有任何实际的文本框会自动执行此操作所以我只得到我应该得到的

 description <XC descritption long, id123123123  IP:120.120.120.20 VCID:2500\r\n  ^\r\n% Invalid input detected at '^' marker.\r\n\r\ngateway2#"

? 我需要计算这个 \b 并根据它们的数量进行一些切割?或者是一些 'proper' 方法来做到这一点?

感谢和问候!

您必须解析退格并删除前面的字符(如果存在)。

我会使用如下方法:

public static string ParseBackspaces(string input)
{
    List<char> characters = new List<char>(input);
    int index = 0;
    while (index < characters.Count)
    {
        int back1 = index - 1;
        if (back1 >= 0 && characters[index] == '\b')
        {
            characters.RemoveRange(back1, 2);
            index = back1;
            continue;
        }
        else if (characters[index] == '\b')
        {
            characters.RemoveAt(index);
            continue;
        }
        index++;
    }
    return new String(characters.ToArray());
}

这里有一个 fiddle 显示您的字符串一旦通过此方法解析:https://dotnetfiddle.net/79U8sH