Bash 写入文件,但解释/删除(摆脱)终端转义序列
我有一个文件(来自使用Bash 写入文件,但解释/删除(摆脱)终端转义序列,bash,terminal,escaping,Bash,Terminal,Escaping,我有一个文件(来自使用script录制的终端会话),其中包含一系列转义序列(ANSI颜色和退格等),例如,当使用cat显示此文件时,终端会对其进行解释。然而,如果我使用 cat myFile > newfile 转义序列不会被解释/删除,而是按原样写入新文件。这不仅适用于猫,事实上我发现不可能摆脱那些逃逸序列。我想清理文件,只保留打印字符(包括空格和换行符),以便其他终端或程序上的人可以在不存在兼容性问题的情况下查看它 关于这一点,还有很多其他的线索,因此我将详细说明为什么我对这些答案不
script
录制的终端会话),其中包含一系列转义序列(ANSI颜色和退格等),例如,当使用cat
显示此文件时,终端会对其进行解释。然而,如果我使用
cat myFile > newfile
转义序列不会被解释/删除,而是按原样写入新文件。这不仅适用于猫,事实上我发现不可能摆脱那些逃逸序列。我想清理文件,只保留打印字符(包括空格和换行符),以便其他终端或程序上的人可以在不存在兼容性问题的情况下查看它
关于这一点,还有很多其他的线索,因此我将详细说明为什么我对这些答案不满意:
sed
或类似的规则表达式来删除转义序列。不足为奇的是,这些线程中充满了注释,显示了这些表达式中断的示例。因此,除非您能证明正则表达式完全重新实现macOS终端转义序列解释/删除,否则这不是我感兴趣的解决方案类型。还有其他的线索cat
文件:
[anton@rain test]$ cat session.log
Script started on Thu Jun 14 18:06:38 2018
[anton@rain test]$ echo 'okay, now it seems to be working'
okay, now it seems to be working
[anton@rain test]$
[anton@rain test]$ exit
exit
Script done on Thu Jun 14 18:06:59 2018
注意:当我从终端复制文本时,原始颜色不保留。我有一个彩色的命令提示符(参见下面的转义序列)
使用less
查看文件:
Script started on Thu Jun 14 18:06:38 2018
ESC]0;anton@rain:/MD/home/anton/tests/test^GESC[?1034hESC[00;35m[anton@rain test]$ ESC[00;30m^G^Gecho 'okay, now it seems to be working'
okay, now it seems to be working
ESC]0;anton@rain:/MD/home/anton/tests/test^GESC[00;35m[anton@rain test]$ ESC[00;30mESC[K
ESC]0;anton@rain:/MD/home/anton/tests/test^GESC[00;35m[anton@rain test]$ ESC[00;30mexit
exit
Script done on Thu Jun 14 18:06:59 2018
注意:当我将粘贴从这篇文章复制回终端时,文件的工作方式与以前不同。最好自己运行
script
进行复制。转义序列也是字符。因此,程序将忠实地解释和显示它们。对于less
,用less-R
显示漂亮的颜色怎么样?@CalvinKim谢谢,但是用less打印漂亮并不能解决我的问题。尝试用escapeseqs>newfile重定向到一个文件,如less-R fileWithEscapeSeqs>newfile
,您将看到所有转义序列仍然存在于新文件中。问题是,我可以很容易地在屏幕上显示文件内容,就像我想要的那样,但是将纯文本版本的内容放入文件似乎非常棘手(我们求助于shell之外的方法)。