我有一个简单的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
可以进行条件着色。