Bash 将PuTTY原始SSH输出转换为纯文本

Bash 将PuTTY原始SSH输出转换为纯文本,bash,awk,sed,grep,putty,Bash,Awk,Sed,Grep,Putty,我有一个来自PuTTY会话的240MB日志文件。这被错误地记录为“SSH数据包和原始数据”格式,而不是“所有会话输出”。如果在文本编辑器中打开文件,则可以看到所需的数据(纯文本) 问题是从原始数据中提取这些数据 例如: 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

我有一个来自PuTTY会话的240MB日志文件。这被错误地记录为“SSH数据包和原始数据”格式,而不是“所有会话输出”。如果在文本编辑器中打开文件,则可以看到所需的数据(纯文本)

问题是从原始数据中提取这些数据

例如:

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.{.
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。
0000002041BE367B53C10FA6527773077970239A.6{。
这将在匹配的
传入数据包
传入原始数据
之间打印行。进一步处理此输出以获得所需的输出

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

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

参考:,

“教一个人钓鱼”,给他一根棍子,指着大海…?我的观点是,如果能激励他们开始学习,总比什么都没有好。:-)不幸的是,还有“输出数据包”和“输出原始数据”。它们的顺序不一致。匹配必须在/^Incoming packet/和/^outing/或/^Incoming raw data/之间。我想我可以用sed-n'/^Incoming packet/,/^Incoming raw data/\\\\^/^outing/}{/!p}来实现这一点,但没有……正确的语法是:
/^Incoming raw data\^outing/
sed -n '/Incoming packet/,/Incoming raw data/{//!{s/^.*\(.\{17\}\)/\1/;p}}'