Ste*_* L. 36 grep regular-expression
我在 Ruby on Rails 应用程序中搜索grep
在 OSX 上使用的单词,我想排除匹配特定模式的目录。
我正在使用以下命令:
grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'
Run Code Online (Sandbox Code Playgroud)
这个命令没有做我认为它会做的事情。这是我认为它会起作用的方式:
在排除目录方面,该命令最终仍会在“./git”和“./log”目录以及“./app/assets”中搜索
我显然缺乏基本的知识,但我不知道它是什么。
don*_*sti 42
该选项的手册页描述有点误导......它是globs 中的模式而不是regex 中的模式。按照info
页面:
--exclude-dir=GLOB
跳过名称后缀与模式 GLOB 匹配的任何命令行目录。递归搜索时,跳过基本名称与 GLOB 匹配的任何子目录。忽略 GLOB 中任何多余的尾部斜杠。
因此,在您的情况下,您可以运行:
grep -inRw -E 'direct' . --exclude-dir={git,log,assets}
Run Code Online (Sandbox Code Playgroud)
排除名为git
,log
和assets
或例如的目录
grep -inRw -E 'direct' . --exclude-dir={\*git,asset\*}
Run Code Online (Sandbox Code Playgroud)
排除git
以asset
.结尾或开头的目录名称。
Joh*_*024 13
--exclude-dir
不明白|
。
但是,您可以通过--exclude-dir
多次指定来获得相同的效果,为要排除的每个目录指定一次:
grep -inRw -E --exclude-dir 'asset' --exclude-dir 'git' --exclude-dir 'log' 'direct'
Run Code Online (Sandbox Code Playgroud)
Jit*_*ran 11
这就是我做错的事情:输入的--exclude-dir
是目录名而不是路径名。目录名称不能包含/
.
以下作品:
grep -r --exclude-dir={cache,lib} pattern /home/ /var/
Run Code Online (Sandbox Code Playgroud)
以下不起作用:
grep -r --exclude-dir={/var/cache,/var/lib} pattern /home/ /var/
Run Code Online (Sandbox Code Playgroud)