如何查找文件中的多个字符串?

如何查找文件中的多个字符串?

我使用以下命令查找具有给定字符串的文件:

find /var/www/http -type f | xargs grep -iR "STRING1"

但是如何找到包含“STRING1”或“STRING2”或“STRING3”的文件?

此代码不起作用:

find /var/www/http -type f | xargs grep -iR "STRING1" | xargs grep -iR "STRING2"

答案1

POSIXly,使用grepwith-E选项:

find /var/www/http -type f -exec grep -iE 'STRING1|STRING2' /dev/null {} +

或者-e

find /var/www/http -type f -exec grep -i -e 'STRING' -e 'STRING2' /dev/null {} +

通过某些实现,至少在 GNU 系统、OSX 和 FreeBSD 上,您可以逃避|

find /var/www/http -type f -exec grep -i 'STRING1\|STRING2' /dev/null {} +

答案2

为了便于维护(如果您要搜索的字符串列表将来可能会发生变化),我会将模式放入文件中(例如patterns.txt)并使用开关-f-R如果您限制find为文件,则没有必要;-H将给出你的文件名,以防只有一个;-F使 grep 将你正在搜索的模式视为字符串,而不是正则表达式,这通常是你想要的):

find /var/www/http -type f -exec grep -iHFf patterns.txt {} +

答案3

只使用有什么问题吗egrep

egrep -r 'string1|string2|string3' /var/www/http

相关内容