繁体   English   中英

如何在Ubuntu上的文件中使用逻辑AND条件搜索关键字?

[英]How can I search for keywords using logical AND conditions in files on Ubuntu?

我一直在尝试在我的Ubuntu文件中搜索多个关键字。 我知道如何为一个文件做到这一点:

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

我想为两个关键字(例如myFunctionmyClass ,以获取可以在myClass实例化myFunction所有文件。

我试着用:

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

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

使用Regex Alternation进行逻辑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}'

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM