Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 写入文件,但解释/删除(摆脱)终端转义序列_Bash_Terminal_Escaping - Fatal编程技术网

Bash 写入文件,但解释/删除(摆脱)终端转义序列

Bash 写入文件,但解释/删除(摆脱)终端转义序列,bash,terminal,escaping,Bash,Terminal,Escaping,我有一个文件(来自使用script录制的终端会话),其中包含一系列转义序列(ANSI颜色和退格等),例如,当使用cat显示此文件时,终端会对其进行解释。然而,如果我使用 cat myFile > newfile 转义序列不会被解释/删除,而是按原样写入新文件。这不仅适用于猫,事实上我发现不可能摆脱那些逃逸序列。我想清理文件,只保留打印字符(包括空格和换行符),以便其他终端或程序上的人可以在不存在兼容性问题的情况下查看它 关于这一点,还有很多其他的线索,因此我将详细说明为什么我对这些答案不

我有一个文件(来自使用
script
录制的终端会话),其中包含一系列转义序列(ANSI颜色和退格等),例如,当使用
cat
显示此文件时,终端会对其进行解释。然而,如果我使用

cat myFile > newfile
转义序列不会被解释/删除,而是按原样写入新文件。这不仅适用于猫,事实上我发现不可能摆脱那些逃逸序列。我想清理文件,只保留打印字符(包括空格和换行符),以便其他终端或程序上的人可以在不存在兼容性问题的情况下查看它

关于这一点,还有很多其他的线索,因此我将详细说明为什么我对这些答案不满意:

  • 人们建议使用
    sed
    或类似的规则表达式来删除转义序列。不足为奇的是,这些线程中充满了注释,显示了这些表达式中断的示例。因此,除非您能证明正则表达式完全重新实现macOS终端转义序列解释/删除,否则这不是我感兴趣的解决方案类型。还有其他的线索

  • 从终端窗口复制粘贴当然也是一个选项,但我已经意识到了这一点

  • 在cat(或echo,或printf)和出现在屏幕上之间的某个地方,这些转义序列被解释。是否可以在该点之后拦截它们并将其打印到文件中

    令人恼火的是,在屏幕上打印的文件中很容易得到我想要的文本时,没有直接/简单的方法来实现这一点

    最后,编写示例代码,以便您可以复制:

    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之外的方法)。