我读过Use grep --exclude/--include syntax to not grep through certain files
但在我的CentOS6.4中
grep --exclude=*.cmd ckim * -r
我看到很多来自 *.cmd文件的grepped行。
看来排除选项对我不起作用
怎么了?
我当然可以做一些
grep ckim \`find . -name \*.c -print\`
但我想知道为什么Grep不起作用
我读过Use grep --exclude/--include syntax to not grep through certain files
但在我的CentOS6.4中
grep --exclude=*.cmd ckim * -r
我看到很多来自 *.cmd文件的grepped行。
看来排除选项对我不起作用
怎么了?
我当然可以做一些
grep ckim \`find . -name \*.c -print\`
但我想知道为什么Grep不起作用
6条答案
按热度按时间n9vozmp41#
你可以引用模式:
PS.
./
是当前目录t9aqgxwy2#
使用
.
而不是*
作为路径规范。l2osamch3#
你也可以这样做
bwntbbo34#
我看到很多来自 *.cmd文件的grepped行。所以似乎**排除选项对我不起作用。
有一个名为
nullglob
的shell选项,当没有匹配文件时,它控制shell模式的扩展。因此,给定以下环境:
在my系统上(其中
nullglob
未设置),执行以下命令:被shell扩展(“理解”)为:
也就是说,我将 * 递归 (
-r
)搜索字符串skim
,它以f.cmd
、g.sh
和sub
开头,但排除与模式'. cmd'匹配的任何文件。结果是:
BUT如果在您的环境中设置了选项
nullglob
,则相同的命令扩展为:注意 * 整个 *
--exclude=...
消失了。所以结果是:现在,解释一下。当 shell 遇到 glob 模式时(即:包含
*
或?
或更多特殊字符),它将其与匹配的文件展开。* 但是 * 如果没有匹配的文件,它要么让模式作为它(如果nullglob
是 not 设置),要么替换为“nothing”(如果nullglob
是设置)。这里的模式是
--include=*.cmd
(在 * 整体 * 处,因为那里没有空间)。万一您有一个符合此模式的文件,它可能会被替换。否则,它要么被“原样”要么被完全删除--取决于nullglob
。您可以轻松显示,设置(
-s
)或取消设置(-u
)当前bash的nullglob
选项的状态:uajslkp65#
如果您想排除某些要grep的文件,您应该使用
-l
选项。6mw9ycah6#
多个文件的最短代码(注意以'~'结尾的文件的DOT)是:
ChatGPT可能会为您提供错误的代码。圆点后面不像nycity.txt~中那样跟'~'