shell Bash终端输出-突出显示包含某些文本的行

0qx6xfy6  于 12个月前  发布在  Shell
关注(0)|答案(5)|浏览(151)

当我在bash中得到输出时,我得到了标准的2色屏幕。有没有什么方法可以在默认情况下,突出显示一行,如果它包含一些关键文本输出?
例如,如果它包含单词“FAIL”,则该行被标记为红色。
我读过这篇https://unix.stackexchange.com/questions/46562/how-do-you-colorize-only-some-keywords-for-a-bash-script,但我想找一些比写一个 Package 器脚本更简单的东西,我不可避免地要在将来的某个时候调试它。

pnwntuvh

pnwntuvh1#

作为一个简单的解决方法,通过grep --color将其管道化以将某些单词变为红色。
添加像^这样的回退来打印不包含任何匹配项的行。

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

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

zbdgwd5y

zbdgwd5y2#

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

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

h -i 'FAIL.*'

或者包含FAIL

h -i '.*FAIL.*'

或用于各种常见日志条目:

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

f3temu5u3#

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

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

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

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

(更新了mklement0反馈)

9rygscc1

9rygscc14#

这将不仅突出一个词,而是整行:

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

搜索短语应在两侧用.*括起来。它会在搜索词或短语之前和之后突出显示。

引用

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

6ioyuze25#

在.profile或.bashrc中添加以下行:

hilite() {
    REGEX_SED=$(echo $1 | sed "s/[|()]/\\\&/g");
    sed "s/$REGEX_SED/\x1b[7m&\x1b[0m/g"
}

然后,* 你可以输入这样的内容:

cat example.txt | hilite FAIL

grep FAIL example.txt | hilite FAILURE
  • 一旦你必须执行一个“源.配置文件”或“..bashrc”或第二次登录,以使其有效

相关问题