当使用grep时,它将突出显示一行中与正则表达式匹配的任何文本。
如果我想要这种行为,但有grep打印出所有行以及?在快速浏览了grep手册页后,我一无所获。
当使用grep时,它将突出显示一行中与正则表达式匹配的任何文本。
如果我想要这种行为,但有grep打印出所有行以及?在快速浏览了grep手册页后,我一无所获。
当前回答
编辑:
这适用于OS X Mountain Lion的grep:
grep --color -E 'pattern1|pattern2|$'
这比'^|pattern1|pattern2'要好,因为^部分的交替匹配在行开始,而$匹配在行结束。一些正则表达式引擎不会高亮显示pattern1或pattern2,因为^已经匹配,并且引擎正在等待。
'pattern1|pattern2|'也会发生类似的情况,因为正则表达式引擎注意到模式字符串末尾的空交替与主题字符串的开头相匹配。
[1]: http://www.regular-expressions.info/engine.html
第一个编辑:
我最终使用perl:
perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'
这里假设您有一个兼容ansi的终端。
最初的回答:
如果你遇到了一个奇怪的grep,这可能会起作用:
grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'
调整数字,得到所有你想要的行。
第二个grep只是删除Mac OS X Mountain Lion上bsd风格的grep插入的多余行,即使连续匹配的上下文重叠。
我以为GNU grep省略了——行当上下文重叠,但它有一段时间所以可能我记错了。
其他回答
你可以只使用grep by:
逐行读取文件 通过grep匹配每行中的模式并突出显示模式 如果没有匹配,则按原样回显该行
这就得到了以下结果:
while read line ; do (echo $line | grep PATTERN) || echo $line ; done < inputfile
如果你这样做是因为你想在搜索中获得更多的上下文,你可以这样做:
cat BIG_FILE.txt | less
用less进行搜索可以突出你的搜索词。
或者将输出输送到您喜欢的编辑器。一个例子:
cat BIG_FILE.txt | vim -
然后搜索/替换/亮点。
如果你想打印“所有”行,有一个简单的工作解决方案:
grep "test" -A 9999999 -B 9999999
A =>之后 B =>以前
因为你想要突出显示匹配,这可能是人为消费(而不是管道到另一个程序),所以一个很好的解决方案将使用:
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"