使用 grep 查找包含正则表达式模式的文件

使用 grep 查找包含正则表达式模式的文件

有没有办法找到包含正则表达式模式的所有文件?注意,我的意思不是 grep使用正则表达式,我的意思是查找包含正则表达式字符串的文件。

即,不是这个:

grep -E '\S+\s+\d+' $file

但类似的东西:

grep -E '<something here>' $file

其中 $file 实际上包含多个正则表达式模式。

更新(为了澄清):

我不想找到那个模式 ( \S+\s+\d+),我想找到带有以下内容的文件任何其中的正则表达式模式。

答案1

是的,您只需要告诉grep搜索细绳而不是使用正则表达式。

该选项的用途如下-F

grep -F -- '\S+\s+\d+' "$file"

要查找当前目录或其下包含此字符串的所有文件(输出包含匹配项的每个文件的路径名以及匹配行):

find . -type f -exec grep -F '\S+\s+\d+' /dev/null {} +

或者使用grep必须-H始终打印包含匹配项的文件的路径名:

find . -type f -exec grep -H -F '\S+\s+\d+' {} +

或者,只查找文件的路径名(而不是匹配的行):

find . -type f -exec grep -l -F '\S+\s+\d+' {} +

与这些文件有关的东西,使用

find . -type f -exec grep -q -F '\S+\s+\d+' {} \; -exec sh -c '
    for pathname do
        # code that uses "$pathname" here
    done' sh {} +

请注意,如果不了解有关搜索文件的更多信息,就不可能搜索“任何正则表达式”,因为任何非空文本字符串都是正则表达式。如果我们查看的文件是 JSON 文件,并且我们知道正则表达式可能作为特定键的值出现,那么很容易检测到具有该键的特定文件。

相关内容