【问题标题】:Why doesn't "grep *q1*" match anything?为什么“grep *q1*”不匹配任何东西?
【发布时间】:2024-01-10 17:16:01
【问题描述】:

我有一个文件列表,使用:

$git show commit:.data/path/to/file/

abc-2018-q1.csv
def-2019-q2.csv
the-2019-q1.csv

我正在尝试做$git show commit:.data/path/to/file/ | grep *q1*

即只选择那些名称包含“q1”的文件。但是该步骤该步骤没有给出任何结果。

如何获得包含“q1”的所需文件。

【问题讨论】:

  • grep 需要一个正则表达式,而不是通配符(此外,当您不引用您的论点时,shell 会在 grep 甚至看到它之前将其评估为 glob 表达式)。你想要git show commit:.data/path/to/file | grep -e 'q1'这样的东西。
  • 顺便说一句,您可能会考虑Unix & LinuxSuperUser 来解决更多关于命令行 UNIX 工具而非软件开发的问题。特定于 git 的问题肯定是这里的主题,但 grep 并不是“软件开发独有的”。

标签: git shell grep


【解决方案1】:

只选择名称中包含“q1”的文件。但是该步骤该步骤没有给出任何结果。

grep 查找模式,q1 本身就是一个完美的模式。

git show commit:.data/path/to/file/ | grep q1

【讨论】:

  • 仅使用 q1 即可给出答案。我应该在我的问题中提到它。但是我特别想在这里使用通配符。无论如何,我已经接受了你的回答。
  • 重点是不要像在 shell 中指定文件名那样在 grep 中使用通配符。如果您只是搜索出现在该行某处的字符串“q1”,那么这就是您需要为您的模式输入的所有内容。
【解决方案2】:

那个命令好像错了, 试试这个:

git show commit:.data/path/to/file | grep "q1"

【讨论】: