jus*_*482 3 grep find regular-expression
我正在运行这个find命令:
find $HOME * -depth -type d -iname *bowtie* | grep "bowtie*-*1[^2]"
Run Code Online (Sandbox Code Playgroud)
我的预期输出是:
/home/user/Documents/scripts/bowtie1.3.0-linux-x86_64
/home/user/Documents/scripts/bowtie-1.3.0-linux-x86_64
Run Code Online (Sandbox Code Playgroud)
但它返回这个:
/home/user/Documents/scripts/bowtie1.3.0-linux-x86_64
/home/user/Documents/scripts/bowtie-1.3.0-linux-x86_64
Documents/scripts/bowtie1.3.0-linux-x86_64
Documents/scripts/bowtie-1.3.0-linux-x86_64
Run Code Online (Sandbox Code Playgroud)
如何修改find命令以仅显示前两个结果?
Kus*_*nda 14
您正在find使用多个相同的搜索路径运行。您正在使用$HOME以及生成的任何名称*。显然,它*扩展到了一些目录,其中包括您正在查找的名称。
建议:
find "$HOME" -type d -name 'bowtie*1.[!2]*'
Run Code Online (Sandbox Code Playgroud)
上述内容还可以grep通过更有创意地使用-name测试来消除您的困扰。在调用之前,您需要引用不应相对于当前目录展开的任何模式find。
该模式匹配以 开头的名称bowtie,然后包含1.n,其中n不是2。代替[!2],您可以使用[13-9]强制匹配除 之外的整数2,而不仅仅是除 之外的任何字符2。
那是因为您将两个参数传递给find:
$HOME目录*它由 shell 扩展到当前目录中的文件和目录的完整列表,该目录可能是您的$HOME.因此find,将首先搜索$HOME并返回类似的内容/home/user/foo,然后它将搜索您提供给它的文件和目录列表,因为它们是由 shell 扩展的,所以是相对于当前目录的路径,因此没有前导/home/user, 和所以它返回类似foo.
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |