我发现一种非常奇怪的情况,当从一个特定目录中运行时,grep无法按预期工作。
在查看一些存档数据时,我发现grep在第一级和第三级目录中工作正常,而在第二级目录中却行不通。
[root@Server ANM]# ls data/atg/|head -n5
2017-01-04-07:31
2017-01-04-08:01
2017-01-04-08:31
2017-01-04-09:01
2017-01-04-09:31
[root@Server ANM]# ls data/atg/|head -n5|grep 201[1-8]
2017-01-04-07:31
2017-01-04-08:01
2017-01-04-08:31
2017-01-04-09:01
2017-01-04-09:31
[root@Server ANM]# cd data
[root@Server data]# ls atg/|head -n5|grep 201[1-8]
[root@Server data]# ls atg/|head -n5|grep 201
2017-01-04-07:31
2017-01-04-08:01
2017-01-04-08:31
2017-01-04-09:01
2017-01-04-09:31
[root@Server data]# ls atg/|head -n5|\grep 201[1-8]
[root@Server data]# ls atg/|head -n5|/bin/grep 201[1-8]
[root@Server data]# ls atg/|head -n5|grep "201[1-8]"
2017-01-04-07:31
2017-01-04-08:01
2017-01-04-08:31
2017-01-04-09:01
2017-01-04-09:31
[root@Server data]# cd atg
[root@Server atg]# ls | head -n5 | grep 201[1-8]
2017-01-04-07:31
2017-01-04-08:01
2017-01-04-08:31
2017-01-04-09:01
2017-01-04-09:31
请注意,grep在ANM /目录中可以正常工作,在ANM / data中时会失败,并且在ANM / data / atg目录中也可以正常工作。
使用/ bin / grep不能解决问题,也不能删除剥离别名。唯一有效的方法是引用正则表达式。
我通常不对grep使用引号,但我认为应该开始。
因为找到了解决方法,所以没有为此寻求帮助。
这些目录很快就会被归档到磁带上,我希望问题会消失。如果有人有想法要检查,请发表评论。
目录中大约有1000个条目,所以我看不到管道出现故障。
我确实注意到,通过 set -x ,外壳程序报告命令的方式有所不同。
这是失败的时候
+ grep 2017 2018
这是可行的
+ grep '201[1-8]'
同一命令,不同目录。