有没有办法让终端显示原始转义序列? (例如用于控制颜色的那些)
我遇到了这个 UNIX.SE 问题,并且想要过滤“红色”输出(按颜色过滤命令的输出)
但是,答案中的命令不适用于我的输出(例如git status
“未跟踪的文件”中的红色)。他们确实为那里的例子工作echo -e '\033[00;31mtest\033[00m' | grep --color=none '[[:cntrl:]]'
。过滤适用grep --color=none '[[:cntrl:]]'
于我的输出,但也显示其他颜色的文本。
我想我看到的红色一定是与 不同的红色\e[31m
。
有没有办法让终端输出原始转义序列?(这样我就可以使用正确的序列来过滤我看到的特定红色)
(bash,Ubuntu 18.04)
- 更新 -
为了澄清起见,我的问题是如何显示原始转义序列。
@egmont' 的回答使用script
有效。基本上,我只需要用来script
记录输出并使用上述答案之一问题找到红色文本,例如:
script /tmp/a.txt
git status
exit
cat /tmp/a.txt | grep -Eo $'\e\\[31m[^\e]*\e\\[[03]?m'
其他答案/评论也正确地指出我的使用git
没有通过管道获得颜色。
答案1
不确定我是否正确理解你的问题。
我想你想要检查某个实用程序(例如git status
)发送到终端模拟器的内容。我对吗?
启动该script
实用程序,它会准确记录这一点。然后打电话git status
或者任何你想要的。然后退出script
shell,它会通知您一个名为 的文件typescript
已创建。在文本编辑器中打开此文件以查找您要查找的序列。
答案2
我想我看到的红色一定是与 不同的红色
\e[31m
。
你猜错了。
% ptybandage git 状态。 | grep 规则 |控制台解码 ECMA48 标签 SGR 31 '我' 'o' 'd' '我' 'F' '我' 'e' 'd' ':' '' '' '' 'r' '你' 'l' 'e' 的 SGR 0 CR 如果 % git 状态。 | grep 规则 |控制台解码 ECMA48 标签 '我' 'o' 'd' '我' 'F' '我' 'e' 'd' ':' '' '' '' 'r' '你' 'l' 'e' 的 如果 %
您还没有git
认为它正在写入终端,因此它不会产生颜色。
进一步阅读
- https://unix.stackexchange.com/a/283984/5132
- https://unix.stackexchange.com/a/249801/5132
- 乔纳森·德博因·波拉德 (2018)。 ”
console-decode-ecma48
”。 小吃指南。软件。