我使用以下命令查找具有给定字符串的文件:
find /var/www/http -type f | xargs grep -iR "STRING1"
Run Code Online (Sandbox Code Playgroud)
但是如何找到包含“STRING1”或“STRING2”或“STRING3”的文件?
此代码不起作用:
find /var/www/http -type f | xargs grep -iR "STRING1" | xargs grep -iR "STRING2"
Run Code Online (Sandbox Code Playgroud)
cuo*_*glm 25
POSIXly,使用grepwith-E选项:
find /var/www/http -type f -exec grep -iE 'STRING1|STRING2' /dev/null {} +
Run Code Online (Sandbox Code Playgroud)
或者-e:
find /var/www/http -type f -exec grep -i -e 'STRING' -e 'STRING2' /dev/null {} +
Run Code Online (Sandbox Code Playgroud)
通过一些实现,至少在 GNU 系统、OSX 和 FreeBSD 上,您可以逃脱|:
find /var/www/http -type f -exec grep -i 'STRING1\|STRING2' /dev/null {} +
Run Code Online (Sandbox Code Playgroud)
为了便于维护(如果您要搜索的字符串列表将来可能会更改),我会将模式放在一个文件中(例如 patterns.txt)并使用-f开关(-R如果您限制find为文件,则不需要;-H会给如果只有一个文件名,请使用文件名;-F导致 grep 将您正在搜索的模式视为字符串,而不是正则表达式,这通常是您想要的):
find /var/www/http -type f -exec grep -iHFf patterns.txt {} +
Run Code Online (Sandbox Code Playgroud)
小智 7
只是使用有什么问题egrep?
egrep -r 'string1|string2|string3' /var/www/http
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
181796 次 |
| 最近记录: |