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

2017-03-29 18:06:01 +08:00
 silenceeeee

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 中完全正常

这个可能是啥原因?

1612 次点击
所在节点    问与答
6 条回复
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
2017-03-30 10:34:30 +08:00
silenceeeee
2017-03-30 10:35:53 +08:00
silenceeeee
2017-03-30 10:36:23 +08:00
@Tony8Finet 不知道咋贴图了 你点开我发的图片链接看下
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
2017-03-31 08:41:12 +08:00
@Tony8Finet j 是的。我也发现 > tmp-out 这样是有结果的 改天没事看看 grep 源代码吗 -_-

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/351263

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX