当使用grep时,它将突出显示一行中与正则表达式匹配的任何文本。
如果我想要这种行为,但有grep打印出所有行以及?在快速浏览了grep手册页后,我一无所获。
当使用grep时,它将突出显示一行中与正则表达式匹配的任何文本。
如果我想要这种行为,但有grep打印出所有行以及?在快速浏览了grep手册页后,我一无所获。
当前回答
使用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。你可能不需要那个标志)。
其他回答
如果要递归地在目录中查找模式,可以先将其保存到文件中。
ls -1R ./ | list-of-files.txt
然后grep它,或者管道它到grep搜索
ls -1R | grep --color -rE '[A-Z]|'
这将列出所有文件,但颜色与大写字母。如果你删除最后一个|,你将只看到匹配。
例如,我用这个来查找命名不好的大写图像,但正常的grep不显示每个文件的路径,只有一次每个目录,这样我就可以看到上下文。
你可以只使用grep by:
逐行读取文件 通过grep匹配每行中的模式并突出显示模式 如果没有匹配,则按原样回显该行
这就得到了以下结果:
while read line ; do (echo $line | grep PATTERN) || echo $line ; done < inputfile
也许这是一个XY问题,您真正要做的是突出显示出现在shell中的单词。如果是这样,您可以使用您的终端模拟器进行此操作。例如,在Konsole中,启动Find (ctrl+shift+F)并输入单词。然后,每当单词在新的或现有输出中出现时,它将被高亮显示,直到您取消该函数。
如果你想打印“所有”行,有一个简单的工作解决方案:
grep "test" -A 9999999 -B 9999999
A =>之后 B =>以前
你可以从https://github.com/kepkin/dev-shell-essentials上使用我的高亮脚本
它比grep更好,因为你可以用它自己的颜色突出显示每个匹配。
$ command_here | highlight green "input" | highlight red "output"