2016-07-27 38 views
1

当您使用grep两次时,第一个高亮部分被删除。据我所知,这有助于避免匹配格式化代码。 (相比之下,只要匹配不重叠,“ack-grep”将突出显示新匹配,同时保留旧匹配的格式,但它会高兴地匹配使用的格式代码。) 我正在寻找的行为是模式匹配底层文本,就好像格式不存在一样,但不会牺牲从原始文件中剥离格式以供将来显示。这种行为是否构建在某个地方?我用grep别名--color = always。你能保存grep中不匹配内容的格式吗?

这可能是Preserve colouring after piping grep to grep的一个副本 - 但是我也在寻找为什么某些程序去掉格式化,以及它是否可以用来纠正意外转义代码匹配。 (如果这个问题已解决或无法解决,我会很高兴地关闭它。)

回答

2

默认情况下,在.bashrc文件中,ls和grep被定义为别名。别名有:

ls -> ls --color=auto 
grep -> grep --color=auto 

auto选项意味着如果stdout是在屏幕上,它会显示颜色输出,但如果输出重定向到一个管道或文件,颜色格式化将被删除。当你放上选项“--color = always”时,无论输出重定向到什么地方,这都会强制用颜色进行格式化。您也可以不使用任何颜色格式--color=never

您可以通过键入alias来检查别名。您也可以执行简单的lsgrep命令(即,别名给出的参数)在开始处附加反斜杠。

例如,ls命令:

\ls 

将显示输出到屏幕而不颜色。

+0

谢谢......我不确定如何获得我想到的有关此信息的行为,但它确实有帮助。如果你有一个通过管道连接到另一个grep的管道,只有最后一个grep会着色,因为第一个管道在管道上被剥离/跳过。你认为有一种方法可以区分彩色和纯色版本,在普通版本上运行,并将三角洲(转义码)合并回来?我知道这比没有更实际的用例更值得付出,但我觉得我错过了一些重要的转义代码和流编辑。 (...) –

+0

有没有更好的方式来模式匹配和/或替换“印刷”字符,同时忽略但保留“未印刷”字符? –