linux - grep菜鸟 - unix grep用法




我如何从grep-R中排除目录? (8)

我想遍历除“node_modules”目录外的所有子目录。


GNU Grep (> = 2.5.2 )的最新版本提供:

--exclude-dir=dir

从递归目录搜索中排除与模式目录匹配的目录。

所以你可以这样做:

grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

有关语法和用法的更多信息,请参阅

  • 文件和目录选择的GNU手册页
  • 相关的答案使用grep --exclude / - 包含语法不通过某些文件grep

对于较老的GNU Greps和POSIX Grep ,请使用find如其他答案中的建议。

或者只是使用ack编辑 :或银色搜索者 )并完成它!


经常使用这个:

grep可以与-r (递归), i (忽略大小写)和-o (仅打印匹配的部分行)一起使用。 要排除files使用--exclude和排除目录使用--exclude-dir

把它放在一起,你会得到如下结果:

grep -rio --exclude={filenames comma separated} \
--exclude-dir={directory names comma separated} <search term> <location>

描述它听起来会比实际情况复杂得多。 用一个简单的例子更容易说明。

例:

假设我正在为调试会话期间显式设置字符串值debugger所有地方搜索当前项目,并且现在希望查看/删除。

我编写一个名为findDebugger.sh的脚本,并使用grep来查找所有的事件。 然而:

对于文件排除 - 我希望确保.eslintrc被忽略(这实际上有一个关于debugger的linting规则,所以应该排除)。 同样,我不希望我的脚本在任何结果中被引用。

对于目录排除 - 我希望排除node_modules因为它包含很多引用debugger的库,我对这些结果不感兴趣。 另外我只想省略.idea.git隐藏的目录,因为我也不关心这些搜索位置,并希望保持搜索性能。

所以这就是结果 - 我创建了一个名为findDebugger.sh的脚本:

#!/usr/bin/env bash
grep -rio --exclude={.eslintrc,findDebugger.sh} \
--exclude-dir={node_modules,.idea,.git} debugger .

一个简单的工作命令:

root/dspace# grep -r --exclude-dir={log,assetstore} "creativecommons.org"

上面我grep当前目录“dspace”中的文本“creativecommons.org”,并排除dirs {log,assetstore}。

完成。


你可以尝试像grep -R search . | grep -v '^node_modules/.*' grep -R search . | grep -v '^node_modules/.*'


更简单的方法是使用“grep -v”过滤结果。

grep -i needle -R * | grep -v node_modules


这个为我工作

grep <stuff> -R --exclude-dir=<your_dir>


非常有用,尤其对于那些处理Node.js ,我们希望避免在“node_modules”内搜索:

find ./ -not -path "*/node_modules/*" -name "*.js" | xargs grep keyword

find . ! -name "node_modules" -type d 






grep