0

我一直在尝试在我的 Ubuntu 文件中搜索多个关键字。我知道如何为一个文件执行此操作:

find /[myRep] -type f | xargs grep -rl "myFunction"

我想对两个关键字(例如myFunctionand myClass)进行此操作,以获取所有可以myFunctionmyClass.

我尝试使用:

find /[myRep] -type f | xargs grep -rl "myFunction" | xargs grep -rl "myClass"

我得到了结果,但我不确定这是否准确。另外,我想知道是否有一种简单的方法可以在搜索中添加更多的逻辑条件,例如“OR”或“NOT”命令......

4

2 回答 2

2

对逻辑 OR 条件使用正则表达式替换

如果您尝试查找包含“myFunction”或“myClass”的文件,您可以使用带有交替的扩展正则表达式 例如:

# Using GNU Find and GNU Grep
find . exec grep --extended-regexp --files-with-matches 'myFunction|myClass' {} +

当将文件列表传递给 grep 时,这将显示包含任一单词的匹配文件。

逻辑与更棘手

逻辑 AND 比较棘手,因为您必须考虑排序。您可以:

  1. 根据一组要求过滤文件,然后是另一组。
  2. 使用功能更全的程序来存储状态。

作为第一种情况的一个简单示例:

# Use nulls to separate filenames for safety.
find /etc/passwd -print0 |
    xargs -0 egrep -Zl root |
    xargs -0 egrep -Zl www

作为第二种情况的人为示例,您可以使用 GNU awk:

# Print name of current file if it matches both alternates
# on different lines.
find /etc/passwd -print0 |
    xargs -0 awk 'BEGIN {matches=0};
                  /root|www/ {matches+=1};
                  matches >= 2 {print FILENAME; matches=0; nextfile}'
于 2013-04-13T14:16:04.943 回答
0

你的命令对我来说很好。您首先 grep 所有文件以查找包含“myFunction”的文件,然后通过另一个 grep 将它们传递给“myClass”。因此,您最终会得到同时包含“myFunction”和“myClass”的文件。

于 2013-04-10T09:42:17.413 回答