当使用grep时,它将突出显示一行中与正则表达式匹配的任何文本。
如果我想要这种行为,但有grep打印出所有行以及?在快速浏览了grep手册页后,我一无所获。
当使用grep时,它将突出显示一行中与正则表达式匹配的任何文本。
如果我想要这种行为,但有grep打印出所有行以及?在快速浏览了grep手册页后,我一无所获。
当前回答
因为你想要突出显示匹配,这可能是人为消费(而不是管道到另一个程序),所以一个很好的解决方案将使用:
less -p <your-pattern> <your-file>
如果你不关心区分大小写:
less -i -p <your-pattern> <your-file>
这还有一个优点,就是拥有页面,这在必须经过很长的输出时是很好的
其他回答
使用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。你可能不需要那个标志)。
您可以确保所有行都匹配,但在不相关的匹配上没有需要突出显示的内容
egrep --color 'apple|' test.txt
注:
egrep也可以拼写为grep -E ——color在大多数发行版中通常是默认值 grep的一些变体会“优化”空匹配,所以你可能想使用“apple|$”来代替(参见:https://stackoverflow.com/a/13979036/939457)
如果你想打印“所有”行,有一个简单的工作解决方案:
grep "test" -A 9999999 -B 9999999
A =>之后 B =>以前
因为你想要突出显示匹配,这可能是人为消费(而不是管道到另一个程序),所以一个很好的解决方案将使用:
less -p <your-pattern> <your-file>
如果你不关心区分大小写:
less -i -p <your-pattern> <your-file>
这还有一个优点,就是拥有页面,这在必须经过很长的输出时是很好的
如果你这样做是因为你想在搜索中获得更多的上下文,你可以这样做:
cat BIG_FILE.txt | less
用less进行搜索可以突出你的搜索词。
或者将输出输送到您喜欢的编辑器。一个例子:
cat BIG_FILE.txt | vim -
然后搜索/替换/亮点。