使用grep时屏幕上出现奇怪的符号?


12

./trans ...命令输出,显示转义码

知道是什么原因造成的吗?如果不使用grep,则唯一显示的内容是ISO代码和空白。

使用的软件

命令: ./trans --id --input /path/to/txt | grep ISO | grep [a-z]

root@box /test # alias grep
alias grep='grep --color=auto'
root@box /test # type grep
grep is aliased to `grep --color=auto'

正常输出:

带有可读文本和URL的trans命令输出


请粘贴输出而不是附加图像。这样其他人就可以重用粘贴的命令在他们的系统上重现该命令。
Suchhi

9
@Thushi在这种情况下,截图是合适的,因为他们将无法在此处粘贴缺少的字形符号。
Sparhawk '18

您可以编辑在命令的运行截图没有结尾greps,且结果alias greptype grep
迈克尔·荷马

Answers:


28

该屏幕快照似乎显示了损坏的ANSI颜色代码,该颜色代码控制文本的呈现。粗体/粗体文本是使用sequence生成的␛[1m,通常由终端解释该序列,而不是直接在屏幕上显示:它只是使下一行文本变亮。un grepped输出的屏幕快照显示标签和每行上的值之间的颜色差异,因此原始输出正在使用它们。

看来该序列已被您的final破坏,该序列grep与代码中的“ m”匹配(因为它是一个字母[a-z]),并尝试用红色本身突出显示。这留下了部分转义序列,您的终端无法处理。

转义字符为U + 001B,这是在未知字符框中呈现的十六进制数字。显示的是转义符(方框),a [,a 1,红色,m后跟预期的匹配文本“ eng”,并且在结尾处也出现“ 22”(“正常颜色和强度”的数字代码)。


损坏的输出实际上是:

␛[1 ␛[31米␛[22米 ␛[22 ␛[31米␛[22米 

其中␛[31m使文字␛[22m变成红色,然后又变回白色,两者都grepm字符周围插入了原始文字。原来是:

 ␛[1分主机␛[22米 

只是明亮的“ eng”,然后切换回普通文本。

您可以通过将final更改为,然后将其更改grep为来进行检查,这将显示所有无法打印的字符以及终端解释的字符。grep --color=alwayshexdump


您可以通过几种方法来处理。一种是grep暂时不使用别名使用:

./trans --id --input /path/to/txt | grep ISO | \grep [a-z]

反斜杠暂时跳过别名并grep直接运行。

另一个是从原始命令中删除ANSI代码,对此问题有一些建议:

./trans --id --input /path/to/txt | perl -pe 's/\e\[[\d;]*m//g' | grep ISO | grep [a-z]

另一个选择是在末尾添加多余的管道:

./trans --id --input /path/to/txt | grep ISO | grep [a-z] | cat

由于final grep的输出不是直接输出到TTY,而是cat通过管道输出,因此不会插入彩色突出显示。

也许最好的选择是让Translate Shell在不连接终端时首先停止在其自己的输出中使用终端控制序列。那将适当地涉及到您向其作者的错误报告,以及对Translate Shell ansi()功能的代码修复,但您可以对此稍作改动:

TERM=dumb ./trans --id --input /path/to/txt | grep ISO | grep [a-z]

这可以通过dumbTranslate Shell环境中的终端类型,至少可以识别为不支持ECMA-48颜色。(遗憾的是,Translate Shell并没有使用terminfo,而只是在其自己的代码中硬接线了它能够理解的终端类型以及所使用的控制顺序。)


哇,如果没有这样的地方,我将永远无法独自调试它,谢谢!
Freedo

IMO的罪魁祸首很容易是损坏的GREP_COLORGREP_COLORS环境变量,其中包含完整的SGR转义序列,而不仅仅是数字。
egmont

哇,这么多解决方案。你也可以添加--color=no到最终的grep(或应用TERM=dumb到它)
安赫尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.