【问题标题】:Can you preserve the formatting of unmatched content in grep?您可以在 grep 中保留不匹配内容的格式吗?
【发布时间】:2016-12-01 10:04:08
【问题描述】:

当您使用 grep 两次时,第一次的突出显示将被删除。据我所知,这有助于避免匹配格式代码。 (相比之下,“ack-grep”将突出显示新匹配,同时保留旧匹配中的格式,只要匹配不重叠,但它会很乐意匹配使用的格式代码。) 我正在寻找的行为是对基础文本的模式匹配,就好像格式不存在一样,但不以从原始文本中剥离格式以供将来显示为代价。这种行为是在某处建立的吗?我的 grep 别名为 --color=always。

这可能是 Preserve colouring after piping grep to grep 的副本 - 但是我也在寻找某些程序为何以及如何去除格式,以及它是否可用于纠正意外的转义码匹配。 (如果解决或无法解决,我会很乐意关闭它。)

【问题讨论】:

    标签: linux bash colors grep ack


    【解决方案1】:

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

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

    auto 选项意味着如果 stdout 是屏幕,它将以颜色显示输出,但如果输出重定向到管道或文件,则颜色格式将被删除。当您放置选项“--color=always”时,无论输出重定向到哪里,都会强制使用颜色进行格式化。你也可以永远不要使用--color=never

    设置任何颜色格式

    您可以通过输入alias 来查看别名。您还可以执行在开头附加反斜杠的普通lsgrep 命令(即没有别名给出的参数)。

    例如,用 ls 命令:

    \ls
    

    将在屏幕上显示没有颜色的输出。

    【讨论】:

    • 谢谢...我不确定如何通过这些信息了解我的想法,但它确实有帮助。如果你有一个 grep 管道连接到另一个 grep 的其他管道,那么只有最后一个 grep 会着色,因为第一个 grep 在管道传输时会剥离/跳过颜色。您是否认为有一种方法可以区分彩色版本和普通版本,在普通版本上进行操作,然后将增量(转义码)合并回来?我知道如果没有更实际的用例,这比它的价值要多,但我觉得我错过了一些重要的转义码和流编辑。 (...)
    • 是否有更好的方法来模式匹配和/或替换“打印”字符,同时忽略但保留“未打印”字符?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    相关资源
    最近更新 更多