11

对于我的工作,我经常在文件中搜索模式。通常我使用grep --color=auto为搜索模式着色。现在,当我搜索多个模式时,所有这些模式都应该出现在一行中,我使用grep pattern1 file|grep pattern2|grep pattern3or awk '/pattern1/&&/pattern2'。但是这样,在 grep 中我失去了对我非常有帮助的着色,或者在 awk 中,我不知道有任何方法只为模式字符串着色。当它变得太麻烦时,我使用grep pattern1 file|grep pattern2|grep pattern3|grep -E "pattern1|pattern2|pattern3".

那么在 grep 中有没有办法在和条件中提及多个模式?(我认为正则表达式应该支持它,但找不到任何,特别是模式的顺序不固定)

或者有什么方法可以彩色打印 awk 搜索模式?

欢迎任何简短的紧凑方法(因为我每天会使用很多次)

4

3 回答 3

10

您可以--color=always在从 grep 管道时使用以保留颜色:

grep pat1 --color=always | grep pat2
于 2013-04-11T10:14:04.010 回答
6

您可以构建自己的shell script/function使用awk和转义代码:

给定文件Awk color text,以下内容将以Awk青色打印匹配的单词:

$ awk '/Awk/{gsub(/Awk/,"\033[1;36m&\033[1;000m");print}' file
Awk color test

这个原则可以很容易地扩展到添加This line ends here到第一行的多个模式。

$ awk '/Awk/&&/This/{gsub(/Awk|This/,"\033[1;36m&\033[1;000m");print}' file
Awk color test This line ends here.

在这里查看更多关于外壳颜色的信息。

于 2013-04-11T10:08:36.403 回答
0

您还可以使用花括号进行参数扩展:

grep --color=always -e{pat1,pat2}

这实际上与以下内容相同:

grep --color=always -e foo -e bar

请注意,这将返回带有pat1AND/OR的结果pat2

(我没有足够的声望点来添加这篇文章作为评论)

于 2021-04-05T16:38:37.457 回答