我一直在尝试在我的Ubuntu文件中搜索多个关键字。我知道如何为一个文件做到这一点:
find /[myRep] -type f | xargs grep -rl "myFunction"
我想为两个关键字(例如myFunction
和myClass
)执行此操作,以获取可在myFunction
中实例化myClass
的所有文件。
我试着用:
find /[myRep] -type f | xargs grep -rl "myFunction" | xargs grep -rl "myClass"
我得到了结果,但我不确定这是否准确。另外,我想知道是否有一种简单的方法可以在搜索中添加更多逻辑条件,例如“OR”或“NOT”命令......
答案 0 :(得分:2)
如果您正在尝试查找包含“myFunction”或“myClass”的文件,则可以使用带有替换的扩展正则表达式例如:
# Using GNU Find and GNU Grep
find . exec grep --extended-regexp --files-with-matches 'myFunction|myClass' {} +
当将文件列表传递给grep时,这将显示包含任一单词的匹配文件。
逻辑AND比较棘手,因为您必须考虑订购。你可以:
作为第一种情况的一个简单例子:
# 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}'
答案 1 :(得分:0)
你的命令对我来说很好。首先grep所有文件以找到包含“myFunction”的文件然后通过另一个grep传递给“myClass”。因此,您最终会得到包含“myFunction”和“myClass”的文件。