【问题标题】:Bash terminal output - highlight lines containing some textBash 终端输出 - 突出显示包含一些文本的行
【发布时间】:2015-05-14 04:47:06
【问题描述】:

当我在 bash 中得到输出时,我得到了我的标准 2 色屏幕。默认情况下,如果一行包含一些关键文本输出,我有什么办法可以突出显示它?

例如如果它包含单词“FAIL”,则该行是红色的。

我读过这个https://unix.stackexchange.com/questions/46562/how-do-you-colorize-only-some-keywords-for-a-bash-script 但我正在寻找比编写包装脚本更简单的东西,我在未来的某个时候不可避免地不得不调试。

【问题讨论】:

  • 根据您的需要,为标准错误流着色实际上可能比查找关键字更可取。我是stderred 的忠实粉丝。

标签: bash shell


【解决方案1】:

对于一个简单的解决方法,通过grep --color 将其变为红色。

添加类似^ 的后备以打印不包含任何匹配项的行。

grep --color -e 'FAIL' -e '^' <<<$'Foo\nBar FAIL Baz\nIck'

Grep output with multiple Colors? 描述了一种获取多种颜色的技巧,如果你需要的话。

【讨论】:

  • ++,但顺便说一句:即使它应该工作,你的命令崩溃 macOS 10.12上的BSD grep v2.5.1 .4(例如,在 PC-BSD 10.1 上使用相同的 grep 版本可以正常工作)。
  • @mklement0 这很好奇!它似乎只是在完成后崩溃,但当然仍然不是一件好事。
  • grep -e '.*' -e '^' 也崩溃了,但着色看起来好像卡在第一行之后的第二个 -e 中。删除 --color 选项可避免崩溃。
【解决方案2】:

如果您乐于安装 BASH 脚本和 ackhhlighter 包具有有用的默认颜色和简单的界面 https://github.com/paoloantinori/hhighlighter

你可以像这样使用它来突出以FAIL开头的行:

h -i 'FAIL.*'

或包含FAIL:

h -i '.*FAIL.*'

或者对于各种常见的日志条目:

h -i '.*FAIL.*' '.*PASS.*' '.*WARN.*'

【讨论】:

  • 第一个对这个主题有帮助的答案(甚至是类似的 stackoverflow 问题)!可以用不同的颜色突出显示不同的单词。使用 iTerm2 和 zsh 在 macOS 上工作?
【解决方案3】:

基于三人组的回答,以下命令将红色突出显示匹配的行并保留其他行:

 your_command | grep --color -e ".*FAIL.*" -e "^"

如果你更喜欢完全倒转的行,用 gnu grep:

 your_command | GREP_COLORS='mt=7' grep --color -e ".*FAIL.*" -e "^"

(根据 mklement0 反馈更新)

【讨论】:

  • 第一个命令 duplicates Tripleee 的答案(除了使用管道而不是此处的字符串)。第二个命令很有帮助,除了你应该提到它需要 GNU grep(例如,在 BSD/macOS 上不起作用)并且可能更清楚地表明 整行 是倒置的。
【解决方案4】:

这不仅会突出显示一个单词,还会突出显示整行:

echo "foo bar error baz" | egrep --color '*.FAIL.*|$'

搜索短语的两边都应该用.* 括起来。它会在搜索词或短语的前后引起高亮。

参考

  1. https://unix.stackexchange.com/a/330613/341457
  2. How .* (dot star) works?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 2011-08-31
    • 2011-10-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多