当使用grep时,它将突出显示一行中与正则表达式匹配的任何文本。

如果我想要这种行为,但有grep打印出所有行以及?在快速浏览了grep手册页后,我一无所获。


当前回答

也许这是一个XY问题,您真正要做的是突出显示出现在shell中的单词。如果是这样,您可以使用您的终端模拟器进行此操作。例如,在Konsole中,启动Find (ctrl+shift+F)并输入单词。然后,每当单词在新的或现有输出中出现时,它将被高亮显示,直到您取消该函数。

其他回答

你可以从https://github.com/kepkin/dev-shell-essentials上使用我的高亮脚本

它比grep更好,因为你可以用它自己的颜色突出显示每个匹配。

$ command_here | highlight green "input" | highlight red "output"

如果你这样做是因为你想在搜索中获得更多的上下文,你可以这样做:

cat BIG_FILE.txt | less

用less进行搜索可以突出你的搜索词。

或者将输出输送到您喜欢的编辑器。一个例子:

cat BIG_FILE.txt | vim -

然后搜索/替换/亮点。

也许这是一个XY问题,您真正要做的是突出显示出现在shell中的单词。如果是这样,您可以使用您的终端模拟器进行此操作。例如,在Konsole中,启动Find (ctrl+shift+F)并输入单词。然后,每当单词在新的或现有输出中出现时,它将被高亮显示,直到您取消该函数。

你可以只使用grep by:

逐行读取文件 通过grep匹配每行中的模式并突出显示模式 如果没有匹配,则按原样回显该行

这就得到了以下结果:

while read line ; do (echo $line | grep PATTERN) || echo $line  ; done < inputfile

使用ack。签出它的passthru选项在这里:ack。它还有一个额外的好处,就是允许使用完整的perl正则表达式。

$ ack --passthru 'pattern1' file_name

$ command_here | ack --passthru 'pattern1'

你也可以像这样使用grep:

$ grep --color -E '^|pattern1|pattern2' file_name

$ command_here | grep --color -E '^|pattern1|pattern2'

这将匹配所有的线条并突出显示图案。^匹配每一行的开始,但不会被打印/高亮显示,因为它不是字符。

(注意,大多数设置将默认使用——color。你可能不需要那个标志)。