Answers:
尝试以下Perl魔术:
perl -ne 's/\x1b[[()=][;?0-9]*[0-9A-Za-z]?//g;s/\r//g;s/\007//g;print' < screenlog.0
使用ansifilter。
ansifilter screenlog.txt > screenlog.txt.clean
brew install ansifilter
起来就像一种魅力。
也尝试使用less的-r或-R选项。
less -r screenlog.0
一旦在screenlog.n中捕获了会话,就可以将文件分类到终端,然后使用screen的hardcopy命令将cat的输出转储到文件中。结果将为您提供没有任何转义序列的干净输出。
唯一的“陷阱”似乎是要确保硬拷贝捕获回滚缓冲区中的所有内容,并且回滚缓冲区仅包含您要捕获的内容。
1. $ screen
2. $ cd /path/to/screenlog.n directory/
3. $ wc -l screenlog.n
4. $ screen -X scrollback 245 # 245 is the number of lines found from your wc command + 5
5. $ cat screenlog.n
6. $ screen -X hardcopy -h screenlog.n.cleaned
请注意,-h确保您捕获整个回滚历史记录,而不仅仅是立即查看的内容
现在,screenlog.n.cleaned文件将包含cat输出的硬拷贝,并且将不包含任何转义序列
wc -l
对我没有用。它返回了28226,但在我的情况下确实需要33031。
如果您是screen
用户,那么Joel Verks的帖子中建议的屏幕硬拷贝解决方案将是最好的-假设您在以下内容中定义了较大的回滚:.screenrc
defscrollback 10000
然后您将执行以下操作:
显示screenlog
文件:
$ cat screenlog.<screen_window_num>
使用hardcopy -h
(请参阅屏幕手册页)将当前窗口内容及其回滚缓冲区保存到hardcopy.#
文件中:
<Escape key> (Ctrl-a by default)
:hardcopy -h