如何通过正则表达式在文件中打印所有匹配项?

How can I print all matches by regex in files?

我有一个目录 /usr/local/,我需要在该目录中找到所有包含与以下正则表达式 .*\s-\scopy\s.* 匹配的字符串的文件。是否可以打印所有此类数学及其包含的完整路径文件名?

如果您有 GNU grep,您可以让 grep 为您完成所有工作:

grep -R '.*\s-\scopy\s.*' /usr/local

-R 开关告诉 grep 递归到每个目录。默认情况下,grep 会在每个输出前加上文件名。

您可能还想使用 -I 标志来忽略二进制文件。

顺便说一下,在这种情况下 .* 是非常无用的,你不妨这样做:

grep -R '\s-\scopy\s' /usr/local

如果您的 grep 不支持 -R 开关,完全 POSIX 兼容的解决方案是:

find /usr/local -type f -exec grep '[[:space:]]-[[:space:]]copy[[:space:]]' {} +