【发布时间】:2021-06-20 09:04:06
【问题描述】:
我正在目录树的文本文件中查找字符串foo=。它在一个普通的 Linux 机器上,我有 bash shell:
grep -ircl "foo=" *
目录中还有许多与"foo=" 匹配的二进制文件。由于这些结果不相关并且会减慢搜索速度,因此我希望 grep 跳过搜索这些文件(主要是 JPEG 和 PNG 图像)。我该怎么做?
我知道有--exclude=PATTERN 和--include=PATTERN 选项,但是模式格式是什么? grep 的手册页说:
--include=PATTERN Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN Recurse in directories skip file matching PATTERN.
在 grep include、grep include exclude、grep exclude 和变体上搜索未找到任何相关内容
如果只有在某些文件中存在更好的 grepping 方法,我完全赞成;移动有问题的文件不是一种选择。我不能只搜索某些目录(目录结构很乱,到处都是)。另外,我无法安装任何东西,所以我必须使用常用工具(如 grep 或建议的 find)。
【问题讨论】:
-
仅供参考,使用的参数: -c 计算文件中的匹配 -i 不区分大小写 -l 只显示匹配的文件 -r 递归
-
排除 svn 目录的更快方法是
--exclude-dir=.svn,所以 grep 根本不会进入它们 -
人们可能需要知道的几个迂腐点: 1. 请注意此处全局缺少引号:--exclude='.{png,jpg}' 不起作用(至少在我的 GNU grep 版本中)因为 grep 在其 glob 中不支持 {}。以上是外壳扩展为 '--exclude=.png --exclude=*.jpg' (假设 cwd 中没有文件匹配 - 极不可能,因为您通常不以 '--exclude 开头的文件名=') grep 喜欢就好了。 2. --exclude 是 GNU 扩展,不是 POSIX 对 grep 定义的一部分,所以如果您使用它编写脚本,请注意它们不一定会在非 GNU 系统上运行。
-
exclude-dir 使用的完整示例:
grep -r --exclude-dir=var "pattern" .
标签: unix search shell command-line grep