grep 中的条件着色

Mar*_*ter 2 grep shell-script text-processing

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

grep -i --color=always -- "$1"
Run Code Online (Sandbox Code Playgroud)

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

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

1 aaa PATTERN
2 bbb ccc PATTERN ddd
3 # eee PATTERN
4 fff ggg
Run Code Online (Sandbox Code Playgroud)

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

cuo*_*glm 5

GNU grep-P选项一起使用:

$ grep PATTERN file | grep -P '^[^#]*\KPATTERN|^'
aaa PATTERN
bbb ccc PATTERN ddd
# eee PATTERN
Run Code Online (Sandbox Code Playgroud)

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