【发布时间】:2014-06-07 12:18:28
【问题描述】:
我用 grep 遇到了这个问题,想知道它是否是一个错误。可重现的场景是一个包含以下内容的文件:
string
string-
并将其保存为“文件”。目标是使用带有 --color=always 的 grep 来输出 'string' 而排除 'string-'。如果没有 --color,以下将按预期工作:
$ grep string file | grep -v string-
但使用 --color 输出两个实例:
$ grep --color=always string file | grep -v string-
我尝试了几种变体,但似乎--color 打破了预期的行为。这是一个错误还是我误解了什么?我的假设是通过--color 应该对结果没有影响。
【问题讨论】:
-
试试
grep --color=always string file > f。现在在可以查看控制字符的编辑器中打开f- 应该有一些 color escape sequences 插入到各种可能意外的位置。 -
或可能预期的位置,例如'string'之前和之后:)
-
问题是 grep 是否应该优雅地处理这种情况。具体来说,除了突出显示匹配的文本之外, --color 是否旨在具有与没有它时相同的行为。
-
@soreau “具体来说,无论 --color 是否旨在具有与没有它时相同的行为,除了突出显示匹配的文本。”
--color的目的是使非可视界面更具可视化和可读性。这意味着它可以被视为 shell 命令链中的最后一步。认为这是对人类需要阅读此文本的最简单的认可,我们必须将其混合起来,以免眼睛感到无聊。 -
您可以反转这些操作:
grep -v string- file | grep --color=always string