将 PuTTY Raw SSH 输出转换为纯文本

Convert PuTTY Raw SSH output to plain text

我有一个来自 PuTTY 会话的 240MB 日志文件。这是错误地以 "SSH packets and raw data" 格式而非 "All session output" 格式记录的。如果我在文本编辑器中打开文件,那么我可以看到我需要的数据(纯文本)。

问题是从原始数据中提取它。

例如:

Incoming raw data at 2016-01-06 15:47:42
  00000000  e8 fd c2 d2 88 a9 39 b9 2a 77 2a 7b 4a 60 fc 21  ......9.*w*{J`.!
  00000010  1d f5 fc d4 b1 58 1f 4d 68 a4 ef 83 03 39 59 b7  .....X.Mh....9Y.
  00000020  41 be 36 7b b5 3c 10 fa 65 27 77 30 77 97 02 39  A.6{.<..e'w0w..9
  00000030  46 4c 28 da 5c c6 2c 1e ae 33 db e1 a8 09 ea 4a  FL(.\.,..3.....J
  00000040  06 94 c6 eb 38 8e d3 d3 33 13 78 08 7c 5f 41 56  ....8...3.x.|_AV
  00000050  f1 13 9e e1                                      ....
Incoming packet #0x31, type 94 / 0x5e (SSH2_MSG_CHANNEL_DATA)
  00000000  00 00 01 00 00 00 00 20 64 69 73 61 62 6c 69 6e  ....... disablin
  00000010  67 20 61 20 72 75 6e 6e 69 6e 67 20 77 61 74 63  g a running watc
  00000020  68 64 6f 67 2e 2e 0d 0a                          hdog....
Incoming raw data at 2016-01-06 15:47:42
  00000000  dc 96 f3 54 f8 a8 5c 83 80 7b a8 07 da 79 95 50  ...T..\..{...y.P
  00000010  3f 19 2f 0c f0 03 a1 01 a3 33 2f 97 75 9d 47 15  ?./......3/.u.G.
  00000020  b9 95 df c6 66 e0 50 32 88 1e db 5b 73 1b 7b ad  ....f.P2...[s.{.

我认为我需要做的是只读取文件中标记为 "Incoming packet" 的部分。然后我可以读取 ascii 字符代码并转换为可读文本(这将恢复制表符、换行符和回车符 returns)。

我不熟悉awk 或sed,但我知道一点grep。我如何才能首先提取我需要从 ASCII 代码转换为文本的部分(可变大小)?

sed -n '/^Incoming packet/,/^Incoming raw data/{//!p}

这将打印匹配 Incoming packetIncoming raw 之间的行。进一步处理此输出以获得所需的输出。

仅打印匹配行中的 ASCII 字符(打印最后 17 个字符):

sed -n '/Incoming packet/,/Incoming raw data/{//!{s/^.*\(.\{17\}\)//;p}}'

参考:1, 2