grep excluding file name pattern
我读过使用grep--exclude/--include语法在某些文件中不grep但在我的中心6.4,当我这样做的时候
1 | grep --exclude=*.cmd ckim * -r |
我看到很多来自*.cmd文件的grepped行。因此,排除选项似乎对我不起作用。怎么了?我当然可以做像
1 | grep ckim \`find . -name \*.c -print\` |
但我想知道为什么grep不起作用。
您可以引用模式:
1 | grep -r --exclude="*.cmd" "ckin" ./ |
ps.
使用
1 | grep -r --exclude \*.cmd ckim . |
I see lots of grepped lines from *.cmd files. So it seems the exclude option is not working for me.
有一个名为
因此,考虑到以下环境:
1 2 3 4 | sh$ touch f.cmd g.sh sh$ mkdir sub sh$ echo ckim > sub/h.cmd sh$ echo ckim > sub/i.cmd |
在我的系统上(其中
1 | grep --exclude=*.cmd ckim * -r |
由壳牌公司扩展("理解")为:
1 | grep --exclude=*.cmd ckim f.cmd g.sh sub -r |
也就是说,我将递归地(
结果是:
1 2 3 | # nullglob is unset sh$ grep --exclude=*.cmd ckim * -r sub/i.sh:ckim |
但是,如果在您的环境中设置了选项
1 | grep ckim f.cmd g.sh sub -r |
注意整个
1 2 3 4 | # nullglob is set sh$ grep --exclude=*.cmd ckim * -r sub/i.sh:ckim sub/h.cmd:ckim |
现在,解释一下。当shell遇到一个glob模式(即包含
这里的模式是
您可以轻松地显示、设置(
1 2 3 4 5 6 7 8 9 10 | sh$ shopt nullglob nullglob on sh$ shopt -u nullglob sh$ shopt nullglob nullglob off sh$ shopt -s nullglob sh$ shopt nullglob nullglob on |
你也可以这样做
1 | grep -rn ckim * | grep -v '\.cmd' |
如果要从grep中排除某些文件,则应使用
1 | grep -l --exclude=*.cmd ckim * -r |