我shopt -s globstar extglob
在我的./bashrc
. 我正在搜索Foo
在以下命令中引用字符串的文件:
grep -Fwn Foo /**/src/**/*.@(h|cpp)
Run Code Online (Sandbox Code Playgroud)
现在我想从文件Foo.h
和Foo.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)
为什么上面的命令不起作用以及如何修复它?
原因很简单,作为一个没有这样的事情&(...)
在操作bash
。bash
仅ksh
使用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)
归档时间: |
|
查看次数: |
683 次 |
最近记录: |