![为什么 grep 在搜索多个目录时会丢失缺失的匹配项?](https://linux22.com/image/1445917/%E4%B8%BA%E4%BB%80%E4%B9%88%20grep%20%E5%9C%A8%E6%90%9C%E7%B4%A2%E5%A4%9A%E4%B8%AA%E7%9B%AE%E5%BD%95%E6%97%B6%E4%BC%9A%E4%B8%A2%E5%A4%B1%E7%BC%BA%E5%A4%B1%E7%9A%84%E5%8C%B9%E9%85%8D%E9%A1%B9%EF%BC%9F.png)
尝试 grep 几个子目录中的文件,grep 不返回任何内容。
~/box/raw $ grep ":2259\"" f*/hh*.adt
~/box/raw $
但是当我进入其中一个子目录时,grep 找到了匹配项。
~/box/raw/f040 $ grep ":2259\"" hh*.adt
hh_sr2014_v8.adt:"2/23/2015 2:33:49 PM","Leave Field:Introduction.BQ1a","Cause:Next Field","Status:Normal","Value:2259"
这有效(即找到匹配项):
~/box/raw $ grep ":2259\"" f040/hh*.adt
但这些却没有:
~/box/raw $ grep ":2259\"" f???/hh*.adt
~/box/raw $ grep ":2259\"" f???/hh_sr2014_v8.adt
~/box/raw $ grep ":2259\"" f*/hh_sr2014_v8.adt
目录名称中似乎有一些关于通配符扩展的规则,我不明白。它们是什么?
这是在 Windows 7 机器上的 Cygwin 上。uname -r
给我“1.7.33-2(0.280/5/3)”。
答案1
将以下内容添加到您的~/.bashrc
文件中:
shopt -s nocaseglob
然后注销并重新登录 Cygwin(不是 Windows),现在 bash shell 在处理文件名时将不再区分大小写。更多信息这里。