我有一个生成彩色输出的命令,我想将它通过管道传输到一个文件中,并去掉颜色代码。cat除了去除颜色代码之外,是否有类似的命令?我打算做这样的事情:
$ command-that-produces-colored-output | stripcolorcodes > outfile
Run Code Online (Sandbox Code Playgroud) 可能的重复:
从脚本输出中删除控制字符(包括控制台代码/颜色)
我正在编写一个脚本来与我正在编写的程序一起工作。我正在尝试做的是使用另一个脚本评估多个客户端的完成程度。我的脚本几乎完全符合我的要求,但是有一些颜色常量插入到我的 XML 输出中,当我稍后将 XML 解析为 PHP 时,这些常量会搞砸。长话短说,我有一个我正在使用的 sed 表达式,它删除了颜色常量的第一部分,但它无法删除看起来像 ^[(B - 因此我的问题。
这是我正在使用的 sed 序列:
sed -r 's/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g'
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个单独的 sed 序列我可以在之后运行以删除尾随序列。我试过使用
sed 's/\^\[\\(B//'
Run Code Online (Sandbox Code Playgroud)
但它似乎没有删除任何东西。我不一定需要答案,如果有人对 sed 和颜色代码有很好的指导,那也会非常有帮助。我用谷歌搜索了一下,但我找到的答案似乎只是去掉了颜色的开头部分。
谢谢你的帮助。
我有一个程序,使用printf一些tput在它混合,我想管道输出到stdout和文件。我更喜欢使用,sed因为我不希望对我的脚本有任何不必要的依赖。这是我到目前为止所得到的。
printf "\n$(tput setaf 6)| $(tput sgr0)$(tput setaf 7)Sourcing files...\033[m\n" | tee install.log
唯一的问题是我的日志文件正在获取所有颜色输出...
^[[36m| ^[(B^[[m^[[37mSourcing files...^[[m
我希望它只是有 | Sourcing files...
我想在控制台的标准输出中看到颜色输出,但我想在命令输出的捕获副本中将其删除tee。\xc2\xa0\n在我的情况下,
命令_that_writes_color_to_stdout | 三通文件\n
我希望该文件不含 ANSI 颜色序列等,\因为这使得grep稍后查看日志文件变得有趣:
echo -e "color \\033[1;31mRED\\033[0m output" | tee test.log\nRun Code Online (Sandbox Code Playgroud)\n在这种情况下,\n颜色将写入控制台并写入文件“test.log”。
\ncolor ^[[1;31mRED^[[0m output\nRun Code Online (Sandbox Code Playgroud)\n有没有办法只为 的tee输出去除 ANSI 序列到文件?
试图让 tee 看到我的终端不知道颜色(环境变量、子 shell),但tee很高兴只写了它所给出的内容。 \xc2\xa0\nI\xc2\xa0 想要控制台输出的颜色(对于人类消费来说,它是太棒了)\n但不希望输出的日志文件副本中有颜色。
echo -e "color \\033[1;31mRED\\033[0m output" | TERM=dumb tee test.log ; od -c test.log\nRun Code Online (Sandbox Code Playgroud)\n我发现很多想要的人在“管道到三通”输出中使用颜色代码(通常当第一个程序意识到某些东西能够显示颜色时),但我没有找到相反的问题/答案。
\n我想每隔 30 秒左右将某个终端或终端模拟器的所有文本复制到一个文件中,并将其显示在conky. 我不是在谈论简单的重定向 ( command > file),它不适用于 ncurses 程序或 NetHack 等游戏。
我该怎么做呢?
我有一个包含(ANSI?)转义序列的文本文件:
当我cat输入文件时,我得到格式化输出:
如何将文本文件的输出保存/通过管道传输到新文件,以便删除控制代码但保留格式?
换句话说,我想将文件的内容转换/导出到新文件,同时保留预期的显示格式(例如,就像使用时得到的那样less -r <file>)。
我需要一种自动化的方法来执行此操作,以便可以记录输出并将其作为电子邮件通知发送。
这是上面屏幕截图中文件的 Base64 输出(用于base64 -d解码它):
G1tIG1syShtbMTsxSA0KG1s0OzRIICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSURFTlRJ
QUwgSU5GT1JNQVRJT04bW0sbWzU7NEgbW0sbWzY7NEgbW0sbWzc7NEhUaGlzIHdvcmsgY29udGFp
bnMgdmFsdWFibGUsIGNvbmZpZGVudGlhbCwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLhtb
SxtbODs0SERpc2Nsb3N1cmUsIHVzZSwgb3IgcmVwcm9kdWN0aW9uIGlzIGdvdmVybmVkIGJ5IHlv
dXIgTGljZW5zZSBBZ3JlZW1lbnQuG1tLG1sxMDs0SBtbSxtbMTE7NEhUaGlzIHVucHVibGlzaGVk
IHdvcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZBtb
SxtbMTI7NEhvdGhlciBDb3VudHJpZXMuICBUaGUgd29yayB3YXMgY3JlYXRlZCBpbiAxOTg4IGFu
ZCByZXZpc2VkIGluIDE5OTQuICAbW0sbWzEzOzRISWYgcHVibGljYXRpb24gb2NjdXJzLCB0aGUg
Zm9sbG93aW5nIG5vdGljZSBzaGFsbCBhcHBseTobW0sbWzE0OzRIG1tLG1sxNTs0SBtbSxtbMTY7
NEggICBDb3B5cmlnaHQgMTk4OCwxOTk0LiBBbGwgcmlnaHRzIHJlc2VydmVkLhtbSxtbMTc7NEgb
W0sbWzE4OzRIG1tLG1sxOTs0SFRoaXMgQ29weXJpZ2h0IG5vdGljZSBhbmQgb3RoZXIgY29weXJp
Z2h0IG5vdGljZXMgaW5jbHVkZWQgaW4gdGhlIG1hY2hpbmUbW0sbWzIwOzRIcmVhZGFibGUgY29w
aWVzIG11c3QgYmUgcmVwcm9kdWNlZCBvbiBhbGwgYXV0aG9yaXplZCBjb3BpZXMuG1tLG1syMTs0
SBtbSxtbMjI7NEhUaGlzIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsuG1tLDQo=
Run Code Online (Sandbox Code Playgroud) 我正在对交互式命令进行故障排除并希望:
tee方法将这个命令的输出同时重定向到一个文件,保留——也就是说,不乱码(例如通过 raw传递ANSI 转义序列而不是正确处理它们)——它在这个结果日志文件中的颜色。tee或类似的东西同时将此命令的输出重定向到一个文件通常,tee -a这对我来说是用我试图像魅力一样在这里登录的同一种命令的输出,但是我在管道中遇到的一些奇怪的极端情况tee正在破坏这种正常的、明智的行为,似乎. 我已经做了一些挖掘,看看以前是否有人遇到过类似的问题并想出了解决方案,但我能够挖掘出的所有相关材料是这样的:
这些资源都没有,但是,相当提供足够的线索,我想我或许能对他们那么快用它来沿着我后一起对我自己的线鹅卵石的东西,我会 …
我使用script命令记录了我当前的会话,所有信息都保存在一个typescript文件中,但是当我使用Vim打开它时,^M由于回车而出现很多s。
我尝试使用该dos2unix命令将此文件转换为 Unix 格式,但我无法这样做。它给出了这个错误:
dos2unix: Binary symbol 0x1B found at line 2,dos2unix: Skipping binary file typescript.
Run Code Online (Sandbox Code Playgroud)
我只是好奇为什么会这样。为什么script以CR/LF形式而不是简单的LF形式产生输出?
在script命令的打字稿中(即在保存的文件中),换行符是 CR + LF (\r\n),尽管原始的(馈送到script)是 LF。为什么?这似乎是 tty 问题,我根本不知道。有人可以解释它没有太多细节吗?
我没有遇到任何麻烦;我只是好奇。:)(但我认为最好修复它,或者至少应该记录下来。)
我script来自 util-linux,但可能没什么关系。
我正在尝试处理“顶级”输出以设置 CPU 性能数据。当我只是 grep 输出它是彩色的:
或者
数字是粗体的,它在输出中添加了很多不必要的数据:

我试图去除颜色代码答案,但它不起作用。为了性能,我想在该问题中避免其他更复杂的答案。
那么如何禁用颜色输出呢?
PS:我找到了如何获取数据:我只能使用数字 awk 然后它可以工作,但仍然想知道是否有任何方法可以在此处禁用颜色。
我有一个命令可以创建非常详细的输出,大约每秒数百行。但是,该命令用于\r以类似于进度条的方式覆盖前一行输出。有时它会向终端写入换行符,这会“烘焙”当前的输出行。
当将此输出重定向到文件时,我得到数百兆的输出 - 每行都被写入文件,而不是在发生回车时被“覆盖”。
我知道这是预期的行为,解决这个问题的一种方法是使程序更智能,并意识到它被重定向到文件而不是打印此交互状态。但是,我无法修改这个程序。
有什么方法可以管道/过滤此输出,以便最终输出文件中的内容与在终端上交互式运行它时看到的内容相同?
我试过了:
spammy_cr_command | uniq
...其输出与没有相同uniq
并且:
spammy_cr_command | sed '/\r/d'
...这也删除了包含换行符的“烘焙”行。
这个脚本运行正常
stat1=$(systemctl list-units --type=service | grep gravity | grep gcr | awk {'print $1'} | xargs systemctl status | grep Active | awk {'print $2'})
echo "$stat1"
if [ $stat1 == 'active' ]
then
echo " >> Gravity service is running ..."
else
echo " >> Gravity service not running ..."
fi
Run Code Online (Sandbox Code Playgroud)
这个不是
stat2=$(gravity status | grep status | awk {'print $3'})
echo "$stat2"
if [ $stat2 == 'active' ]
then
echo " >> Gravity service is running ..."
else …Run Code Online (Sandbox Code Playgroud)