gpt4 book ai didi

bash - 使用 --include 选项运行 grep 时出现奇怪的问题

转载 作者:行者123 更新时间:2023-11-29 09:21:11 24 4
gpt4 key购买 nike

这是 bash shell 中的代码。如果不是这样,应该如何指定文件掩码?我希望这两个命令都能找到搜索表达式,但它没有发生。在这个例子中,我事先知道我更愿意将搜索限制在 python 源代码文件中,因为不合格的搜索是愚蠢的时间浪费。

所以,这按预期工作:

grep -rni '/home/ga/projects' -e 'def Pr(x,u,v)'

/home/ga/projects/anom/anom.py:27:def Pr(x,u,v): blah, blah, ...

但这行不通:

grep --include=\*.{py} -rni '/home/ga/projects' -e 'def Pr(x,u,v)'

我正在使用 GNU grep 2.16 版。

最佳答案

--include=\*.{py} 看起来像失败的尝试使用大括号扩展 (未加引号 {...} 表达式)。

但是,对于 brace expansion 要出现在 bash(以及 kshzsh)中,您必须:

  • 列表,包含至少 2 项,用 , 分隔;例如{py,txt},扩展为 2 个参数,pytxt

    <
  • 或者,范围的项目由两个端点组成,用..分隔;例如,{1..3},它扩展为 3 个参数、123

因此,对于单个项目,根本不使用大括号扩展:

--include=\*.py

如果您确实有多个扩展需要考虑,例如 *.py 以及 *.pyc 文件,这里有一个强大的形式来说明底层 shell 功能:

'--include=*.'{py,pyc}

这里:

  • 应用大括号扩展,因为{...} 包含一个 2 项列表。
  • 由于{...}直接跟在文字(单引号)字符串--include=* 之后。 ,大括号展开的结果包括文字部分。
  • 因此,2 个参数最终传递给 grep,具有以下文字内容:
    • --include=*.py
    • --include=*.pyc

关于bash - 使用 --include 选项运行 grep 时出现奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44119263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com