grepping 与“shopt -s globstar extglob”

Loo*_*oom 4 bash wildcards

shopt -s globstar extglob在我的./bashrc. 我正在搜索Foo在以下命令中引用字符串的文件:

grep -Fwn Foo /**/src/**/*.@(h|cpp)
Run Code Online (Sandbox Code Playgroud)

现在我想从文件Foo.hFoo.cpp. 以下是获得此目标的命令

grep -Fwn Foo /**/src/**/*.@(h|cpp) | grep -v Foo.h | grep -v Foo.cpp
Run Code Online (Sandbox Code Playgroud)

我想在没有管道命令的情况下使用!&位置模式来制作它。我的意思是像下面这样

grep -Fwn Foo /**/src/**/@(*.@(h|cpp)&(!(Foo.*)))
Run Code Online (Sandbox Code Playgroud)

为什么上面的命令不起作用以及如何修复它?

Sté*_*las 5

原因很简单,作为一个没有这样的事情&(...)在操作bashbashksh使用extglob. 在这里你想要:

grep -Fwn Foo /**/src/**/!(Foo).@(h|cpp)
Run Code Online (Sandbox Code Playgroud)

使用ksh93,您可以这样使用&

grep -Fwn Foo /**/src/@(*.@(h|cpp)&!(Foo*))
Run Code Online (Sandbox Code Playgroud)

zsh有一个 and-not 运算符extendedglob

grep -Fwn Foo /**/src/(*.(h|cpp)~Foo*)
Run Code Online (Sandbox Code Playgroud)