【问题标题】:Alias for a combination of grep and find is needed需要 grep 和 find 组合的别名
【发布时间】:2017-07-19 15:07:15
【问题描述】:

很多时候我需要从一个目录和下面的目录中搜索具有特定类型的所有文件中的模式。例如,我需要让 grep 不要查看 *.h、*.cpp 或 *.c 以外的文件。但是如果我输入:

grep -r pattern .

它会查看所有文件。如果我输入:

grep -r pattern *.c

它尝试当前文件夹中的 *.c 文件(在我的情况下没有文件)和 *.c 文件夹中的文件(在我的情况下没有文件夹)。我也想问它查看所有文件夹,但只查看给定类型的文件。我认为 grep 不足以用于此目的。所以,我也从 find 那里得到帮助,就像这样:

grep pattern `find . -name '*c'`

首先,让我知道我是否正确地从 find 获得帮助。 grep 够用吗?其次,我更喜欢为 bash 写一个别名,这样使用:

mygrep pattern c

被翻译成相同的命令,避免使用 ` 和 ' 并且更简单。我试过了:

alias mygrep="grep $1 `find . -name '*$2'`"

但它不起作用并发出错误:

grep: c: No such file or directory

我尝试更改它,但我无法成功获得别名。

有什么想法吗?

【问题讨论】:

  • 只搜索特定的文件类型,grep -r --include='*.c' 'pattern'.. 还有其他选项以及 --exclude--exclude-dir .. 在任何情况下,如回答,使用函数而不是别名跨度>

标签: bash grep find alias


【解决方案1】:

最好使用function than an alias,并使用-exec 而不是findgreppassing the output。该输出将受到分词和通配符的影响,因此可能会产生令人惊讶的结果。而是尝试:

mygrep () {
    find . -name "*$2" -exec grep "$1" {} +
}

【讨论】:

  • 哦,好的。我应该把这个功能放在哪里?
  • @hamidi 你可以把它放在你的.bash_profile 或者任何你可以放别名的地方
  • 您可以将-color=always 添加到grep 命令中(即,就在"$1" 之前)
猜你喜欢
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 2021-08-17
相关资源
最近更新 更多