如何grep MATCH彩色输入?

Zom*_*ies 10 grep colors pattern-matching

假设我有一个为终端着色的命令的输出。我想匹配包含黄色的任何行。我怎样才能在 grep 中做到这一点,例如:mycommand -itSomtimesPrintsLinesWithYellowColorCodes | grep -e "?????"

注意:这不是关于为 grep 的输出着色或添加任何颜色。这只是关于如何过滤/匹配进入 grep 的输入的颜色。

Joh*_*024 10

让我们使用tput为您的终端生成黄色和黑色的颜色代码:

$ yel=$(tput setaf 3)
$ blk=$(tput setaf 0)
Run Code Online (Sandbox Code Playgroud)

让我们来看看黄色代码实际包含的内容:

$ echo -n "$yel" | hexdump -C
00000000  1b 5b 33 33 6d                                    |.[33m|
00000005
Run Code Online (Sandbox Code Playgroud)

现在,我们可以使用grep搜索黄色代码并打印从黄色代码的开头到下一个代码匹配的字符串,无论该代码是什么:

$ echo "abc ${yel}Yellow${blk} def" | grep -Eo $'\x1b\[33m.[^\x1b]*\x1b\[....'
Yellow 
Run Code Online (Sandbox Code Playgroud)

请注意,黄色的颜色代码包括[哪些grep被认为是正则表达式活动字符。因此,要匹配文字[,我们需要将其转义为grep。为此,我们使用 bash$'...'定义带有 [` 转义字符的颜色代码。

在您的终端上产生黄色的代码可能不止一个。您将需要检查正在使用的任何命令的输出,以确定正在使用哪些代码并将它们包含在您的grep命令中。