![需要帮助确定导致 Zypper --no-color 选项被忽略的原因](https://linux22.com/image/212960/%E9%9C%80%E8%A6%81%E5%B8%AE%E5%8A%A9%E7%A1%AE%E5%AE%9A%E5%AF%BC%E8%87%B4%20Zypper%20--no-color%20%E9%80%89%E9%A1%B9%E8%A2%AB%E5%BF%BD%E7%95%A5%E7%9A%84%E5%8E%9F%E5%9B%A0.png)
当我发出时zypper --no-color update -y
我仍然可以看到 ANSI 代码。这是日志的示例:
Retrieving package glibc-extra-2.31-150300.41.1.x86_64 (11/460), 64.6 KiB( 27.7 KiB unpacked)
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm --------------------------------------------------------------------------------------------------[starting]
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm ---------------------------------------------------------------------------------------------[\ (1.1 KiB/s)]
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm ..........................................................................................[done (1.1 KiB/s)]
Retrieving package gtk3-data-3.24.34-150400.3.3.1.noarch (12/460), 111.5 KiB( 7.3 KiB unpacked)
←[2K
值得注意的是,它仅在空行上包含 ANSI 代码。如果没有这个--no-color
选项,它将包含更多的内容:在每行的开头和结尾。
如何才能彻底摆脱所有 ANSI 代码?
答案1
该zypper
实用程序不应使用任何如果终端是“哑终端”( TERM=dumb
) 或输出被重定向到非终端,则 ANSI 转义。不幸的是,目前尚不清楚您如何创建“日志”。请随时用相关信息更新问题。
在下面的答案中,我将假设您的版本有问题,zypper
并且它忽略了它没有将输出写入非终端的事实。
由于\033[2K
逃生用于删除当前行(它是EL
或“擦除行”代码,与颜色无关),并不完全清楚您想要获得什么输出,因为仅删除转义符可能会使行上的字符未被擦除。
要删除\033[2K
转义,请使用类似的东西
e2k=$( printf '\033[2K' )
your command | sed "s/$e2k//g"
清空具有此转义序列的行(同时删除输出行上的任何内容后转义码):
e2k=$( printf '\033[2K' )
your command | sed "s/.*$e2k.*//"
由于\033[2K
不移动光标,因此更复杂的方法需要计算当前光标位置并仅清除到该点的行。
你可以删除所有 ANSI 代码,但由于其中一些用于光标定位等操作,您必须指定每个代码要替换的内容,否则您可能会得到一个更加乱码和难以理解的文本文件。在这种情况下,您似乎关心的唯一代码是此答案中提到的代码。