grep 中的条件着色

grep 中的条件着色

我有一个简单的bash脚本。我的脚本的一行与 grep 匹配“模式”并为匹配颜色

grep -i --color=always -- "$1"

我需要修改它,以便它只为匹配着色,如果该行不是注释(即,如果它不以 开头#)。换句话说:我仍然希望 grep 匹配注释行,但不对其进行着色。

假设我有以下文本文件(添加了行号)

1 aaa PATTERN
2 bbb ccc PATTERN ddd
3 # eee PATTERN
4 fff ggg

我需要 grep 表达式来匹配第 1、2、3 行,但只为未注释的行(1 和 2)着色

答案1

GNU grep与选项一起使用-P

$ grep PATTERN file | grep -P '^[^#]*\KPATTERN|^'
aaa PATTERN
bbb ccc PATTERN ddd
# eee PATTERN

\K导致左侧的所有内容PATTERN都不包含在匹配的字符串中。此解决方案假设您的grep别名为grep --color=auto

答案2

不可能以grep这种方式进行条件着色。它只能突出显示它匹配的“模式”。

答案3

只是一个小技巧: grep -E 'PATTERN' <filename> | grep --color -E "^[^#]*|$" -

你可以使用这个:首先grep匹配带有 PATTERN 的行,然后grep匹配不以“#”开头的第二个颜色行。

我不认为grep --color可以进行条件着色。

相关内容