![使用 grep 查找包含正则表达式模式的文件](https://linux22.com/image/171938/%E4%BD%BF%E7%94%A8%20grep%20%E6%9F%A5%E6%89%BE%E5%8C%85%E5%90%AB%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%A8%A1%E5%BC%8F%E7%9A%84%E6%96%87%E4%BB%B6.png)
有没有办法找到包含正则表达式模式的所有文件?注意,我的意思不是 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 文件,并且我们知道正则表达式可能作为特定键的值出现,那么很容易检测到具有该键的特定文件。