Zombies Asked: 2018-02-16 12:52:00 +0800 CST2018-02-16 12:52:00 +0800 CST 2018-02-16 12:52:00 +0800 CST 如何 grep MATCH 彩色输入? 772 假设我有一个为终端着色的命令的输出。我想匹配任何包含黄色的行。我如何在 grep 中执行此操作,例如:mycommand -itSomtimesPrintsLinesWithYellowColorCodes | grep -e "?????" 注意:这不是为 grep 的输出着色或添加任何颜色。它只是关于如何过滤/匹配进入 grep 的输入的颜色。 grep colors 1 个回答 Voted Best Answer John1024 2018-02-16T13:13:18+08:002018-02-16T13:13:18+08:00 让我们使用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命令中。
让我们使用
tput
为您的终端生成黄色和黑色的颜色代码:让我们检查一下黄色代码实际包含的内容:
现在,我们可以使用
grep
搜索黄色代码并打印从黄色代码开头匹配到下一个代码的字符串,无论该代码是什么:请注意,黄色的颜色代码包括
[
被grep
认为是正则表达式活动字符的颜色代码。因此,要匹配文字[
,我们需要将其转义为grep
. 为此,我们使用 bash$'...'
定义带有 [` 转义的颜色代码。很可能有不止一个代码会在您的终端上产生黄色。您将需要检查您正在使用的任何命令的输出,以确定正在使用哪些代码并将它们包含在您的
grep
命令中。