【问题标题】:Using colored output for awk, or grep multiple pattern search in and condition对 awk 使用彩色输出,或在条件中使用 grep 多模式搜索
【发布时间】:2013-04-11 09:36:15
【问题描述】:

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

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

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

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

【问题讨论】:

  • stackoverflow.com/a/6540890/297323上查看我的回答
  • @FredrikPihl 我之前用 awk 颜色输出搜索过,它们实际上都是在格式化一个字段,而不是一个模式。因此,如果我愿意,我可以将第二场设为绿色,但我不知道我的模式会出现在第二场还是第三场。我想要的是该模式应该是绿色的,无论它来自哪里

标签: bash awk grep


【解决方案1】:

当从 grep 进行管道传输以保留颜色时,您可以使用 --color=always

grep pat1 --color=always | grep pat2

【讨论】:

  • 谢谢@perreal,它拯救了一天:)。但是,我仍然很好奇, grep 有没有办法在“和”条件下组合模式?如果存在“或”条件,为什么“和”不存在?我不是在谈论管道输出,而是一个 grep,它将以任何顺序查找包含所有给定模式的字符串
  • 方法是 1) 管道,2) 使用类似 grep -e 'pat1.*pat2' -e 'pat2.*pat1' input 的东西。也许它丢失了,因为它是多余的(你不能 or 使用管道)。
【解决方案2】:

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

给定文件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.

查看here 了解更多关于外壳颜色的信息。

【讨论】:

  • 感谢@sudo_O,我知道 gsub,但从未想过以这种方式使用它。它完美地回答了第二个问题。
【解决方案3】:

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

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

实际上等同于:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-10-19
    • 2017-03-15
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2017-09-29
    • 2021-05-21
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多