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

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


当前回答

您可以确保所有行都匹配,但在不相关的匹配上没有需要突出显示的内容

egrep --color 'apple|' test.txt 

注:

egrep也可以拼写为grep -E ——color在大多数发行版中通常是默认值 grep的一些变体会“优化”空匹配,所以你可能想使用“apple|$”来代替(参见:https://stackoverflow.com/a/13979036/939457)

其他回答

你可以只使用grep by:

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

这就得到了以下结果:

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

您可以确保所有行都匹配,但在不相关的匹配上没有需要突出显示的内容

egrep --color 'apple|' test.txt 

注:

egrep也可以拼写为grep -E ——color在大多数发行版中通常是默认值 grep的一些变体会“优化”空匹配,所以你可能想使用“apple|$”来代替(参见:https://stackoverflow.com/a/13979036/939457)

因为你想要突出显示匹配,这可能是人为消费(而不是管道到另一个程序),所以一个很好的解决方案将使用:

less -p <your-pattern> <your-file>

如果你不关心区分大小写:

less -i -p <your-pattern> <your-file>

这还有一个优点,就是拥有页面,这在必须经过很长的输出时是很好的

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

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

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

如果要递归地在目录中查找模式,可以先将其保存到文件中。

ls -1R ./ | list-of-files.txt

然后grep它,或者管道它到grep搜索

ls -1R | grep --color -rE '[A-Z]|'

这将列出所有文件,但颜色与大写字母。如果你删除最后一个|,你将只看到匹配。

例如,我用这个来查找命名不好的大写图像,但正常的grep不显示每个文件的路径,只有一次每个目录,这样我就可以看到上下文。