如何 grep MATCH 彩色输入?

如何 grep MATCH 彩色输入?

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

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

答案1

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

$ yel=$(tput setaf 3)
$ blk=$(tput setaf 0)

我们来看看黄色代码实际上包含什么:

$ echo -n "$yel" | hexdump -C
00000000  1b 5b 33 33 6d                                    |.[33m|
00000005

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

$ echo "abc ${yel}Yellow${blk} def" | grep -Eo $'\x1b\[33m.[^\x1b]*\x1b\[....'
Yellow 

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

我们使用了两个选项grep-E告诉grep使用(现代)扩展正则表达式。该选项-o指示grep仅打印匹配行的匹配(非空)部分,每个此类部分都在单独的输出行上。

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

相关内容