使用 Grep 在文件系统上的文件中查找字符串

使用 Grep 在文件系统上的文件中查找字符串

我需要对文件系统中的多个文件进行搜索以查找字符串“RUSH2112”。我已完成以下命令,但我不确定这是否正确。我站在已安装的文件系统中。

find . -type f -exec grep -i1 "Rush2112" {} \; 

答案1

寻找一个细绳(不是正则表达式)不关心大小写,使用grep -iF STRING(whereSTRING应该是您要查找的带引号的字符串)。

要递归目录层次结构中的所有常规文件,请执行以下操作

find . -type f -exec grep -iF STRING /dev/null {} +

此命令与您的命令之间的主要区别在于,它将grep针对找到的文件组执行。您的命令将为grep每个找到的文件运行一次,如果文件很多,则速度可能会较慢。这是+最后造成这种差异的原因。

另一区别是,由于grep使用多个文件调用,因此其输出将包含找到匹配项的文件的路径名。在/dev/null那里力量grep如果碰巧仅使用单个文件调用此行为。如果您的实现具有非标准(但常见)选项,则可以使用grep's-H选项而不是包含。/dev/nullgrep

的某些实现grep还可以选择自行递归目录,而无需借助find.这通常通过一个-R选项来完成:

grep -R -iF STRING .

请注意,GNUgrep还有一个-r与其选项略有不同的选项-R(使用 时-r,不会遵循符号链接,这将更接近地模仿通过 运行时获得的行为grepfind . -type f


如果您要查找的只是包含该字符串的文件的路径名,而不一定是那些匹配的文件中的实际行,那么您可以通过多种不同的方式来执行此操作(所有方式都与上面提到的方式类似) )。

  • 用作grep -q每个文件的测试:

    find . -type f -exec grep -qiF STRING {} ';' -print
    
  • grep -l跨通过以下方式找到的文件组使用find

    find . -type f -exec grep -ilF STRING {} +
    
  • 使用递归grep -l

    grep -R -ilF STRING .
    

如果您想进一步处理包含给定字符串的文件,那么我会选择第一个替代方案:

find . -type f -exec grep -qiF STRING {} ';' -exec sh -c '
    for pathname do
        # Process "$pathname" here
    done' sh {} +

或者,grep在内联脚本内部进行操作:

find . -type f -exec sh -c '
    for pathname do
        if grep -qiF STRING "$pathname"; then
            # Process "$pathname" here
        fi
    done' sh {} +

有关的:

相关内容