使用 ANSI 颜色显示文件

bob*_*lan 18 bash terminal

我有一个带有 ANSI 颜色的文件。

测试.txt:
\e[0;31mExample\e[0m

我想在终端中显示这个文件的内容,就像cat那样,但我也想显示颜色。

小智 16

我正在寻找这个确切的 bash 问题的解决方案。我几乎错过了@Thomas Dickey 的评论,它为我提供了最优雅的解决方案。

echo -e $(cat test.txt)
Run Code Online (Sandbox Code Playgroud)

一些对我不起作用的事情是(显然你不能用管道来回声)

cat test.txt | echo -e
Run Code Online (Sandbox Code Playgroud)

或者

less -R test.txt
Run Code Online (Sandbox Code Playgroud)

我遇到的另一个问题是 echo -e 没有很好地打印文件中的换行符和连续空格。为了打印这些,我使用了以下内容。

echo -ne $(cat test.txt | sed  's/$/\\n/' | sed 's/ /\\a /g')
Run Code Online (Sandbox Code Playgroud)

这适用于包含的 test.txt 文件

\e[0;31mExa         mple\e[0m
\e[0;31mExample line2\e[0m
Run Code Online (Sandbox Code Playgroud)

  • 经过进一步测试并发现不同终端程序(iTerm、Atom/nuclide)中更多的不一致之处,我发现最好将 `$(cat file.txt)` 用双引号括起来,并在末尾添加换行符 - 不需要对于 sed – 所以:`echo -ne "$(<file.txt)" \\n` 或 `echo -ne "$(cat <<"EOF" . . . EOF)" \\n`。这也阻止了 bash 在文本中执行全局扩展。 (4认同)