使用 grep --recursive,如何排除其中包含“不需要”和“想要”字样的特定行?

cev*_*ruz 5 grep bash

我目前正在构建我的 dotfiles,我想列出TODO: ...我项目目录中的所有注释,我创建了一个 bash 别名来执行此操作:

 alias mytodo='grep --recursive "TODO: "'
Run Code Online (Sandbox Code Playgroud)

它运行良好,但是,它也返回别名定义。这是示例输出。

 devs@dotfiles$ mytodo

 bash/profile.d/aliases/: alias mytodo='grep --recursive "TODO: "'
 bin/git_branch_status/: # TODO: Add checking of remote branch status.
 tools/setup/: # TODO: Add search for existing symlinks.
Run Code Online (Sandbox Code Playgroud)

如何用别名定义专门排除该行?

Jig*_*aga 11

防止正则表达式匹配自身的一种方法是将单个字符包含在字符类中:

alias mytodo='grep --recursive "TOD[O]: "'
Run Code Online (Sandbox Code Playgroud)

或者(对Stéphane Chazelas的提示),您可以在模式中使用额外的引号保存别名:

alias mytodo='grep --recursive "TO''DO: "'
Run Code Online (Sandbox Code Playgroud)

然后仍然找不到该行,但别名包含原始模式。这在您想使用时很有用,例如。固定字符串匹配 ( grep -F)。

  • 最常用的情况:`ps <some-option> | grep "[p]rocess"` 避免每次都显示 `grep` 进程 (4认同)
  • 或者 `alias mytodo='grep --recursive "TO''DO: "'` 仍然会创建一个 `grep --recursive "TODO: "` 别名。 (2认同)