V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
silenceeeee
V2EX  ›  问与答

bash grep 命令比较奇怪的一个问题

  •  
  •   silenceeeee · 2017-03-29 18:06:01 +08:00 · 1709 次点击
    这是一个创建于 2800 天前的主题,其中的信息可能已经有所发展或是发生改变。

    t.txt 文件内容为:

    <title><{$action|default:""}>-XX</title>
    

    执行命令:

    grep -n --color -E 'XX' t.txt
    

    可以得到正确的结果

    执行命令

    grep -n --color -E '.*XX.*' t.txt
    

    会在终端显示一个空行

    执行命令

    grep -n  -E '.*XX.*' t.txt
    

    也能得到正确的结果(对于匹配到的内容不着色)

    环境: osx iterm2

    以上提到的所有命令在 centos7 中完全正常

    这个可能是啥原因?

    6 条回复    2017-03-31 08:41:12 +08:00
    Tony8Finet
        1
    Tony8Finet  
       2017-03-29 21:46:26 +08:00
    我这试过正常显示 (Max OS 10.9.5 + iTerm2):
    /usr/bin/grep -n --color -E '.*XX.*' t.txt
    1:<title><{$action|default:""}>-XX</title>
    (整行为红色,除了 "1:" 是标示第 1 行外)

    先检查一下是否 grep 已在 alias 中增添了什么,或是用 /usr/bin/grep 再试一次。
    silenceeeee
        2
    silenceeeee  
    OP
       2017-03-30 10:34:30 +08:00
    silenceeeee
        3
    silenceeeee  
    OP
       2017-03-30 10:35:53 +08:00
    silenceeeee
        4
    silenceeeee  
    OP
       2017-03-30 10:36:23 +08:00
    @Tony8Finet 不知道咋贴图了 你点开我发的图片链接看下
    Tony8Finet
        5
    Tony8Finet  
       2017-03-31 00:54:40 +08:00
    r#4 @silenceeeee 依照你图片所示做了一次,确定是 CRLF line terminator 的影响。若将 CRLF 改成 LF 则可以正确看到有颜色的输出结果。

    用 grep -n --color -E '.*XX.*' t.txt > tmp-out ,可以看到 tmp-out 內容确实有输出,不知算不算是 grep --color 的 bug 。

    我在 CentOS 7 下试的结果一样,只要是 CRLF 的就会看不到输出结果。

    silenceeeee
        6
    silenceeeee  
    OP
       2017-03-31 08:41:12 +08:00
    @Tony8Finet j 是的。我也发现 > tmp-out 这样是有结果的 改天没事看看 grep 源代码吗 -_-
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1150 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.