Unix 如何使用find命令查找文本和文件的总数

Unix 如何使用find命令查找文本和文件的总数,unix,find,Unix,Find,我正在尝试运行find命令以查找特定文本的出现总数,并尝试使用另一个find命令来获取包含此文本的文件数 我现在掌握的是这个命令 find . -name "*.txt" | xargs grep -i "abc" 这将带来所有包含文本abc等的文件。我想获取一个或两个find命令来获取 abc出现的总次数 包含abc的文件总数 您需要使用更多grep(1)选项来实现您的愿望: 对于abc发生的总次数,您需要注意abc在一行上出现两次或两次以上的情况: find . -name '*.txt'

我正在尝试运行
find
命令以查找特定文本的出现总数,并尝试使用另一个find命令来获取包含此文本的文件数

我现在掌握的是这个命令

find . -name "*.txt" | xargs grep -i "abc"
这将带来所有包含文本abc等的文件。我想获取一个或两个
find
命令来获取

  • abc出现的总次数
  • 包含abc的文件总数

  • 您需要使用更多
    grep(1)
    选项来实现您的愿望:

  • 对于
    abc
    发生的总次数,您需要注意
    abc
    在一行上出现两次或两次以上的情况:

    find . -name '*.txt' -print0 | xargs -0 grep -o -i abc | wc -l
    
    find . -name '*.txt' -print0 | xargs -0 grep -l -i abc | wc -l
    
  • 对于包含
    abc
    的文件总数,您需要注意单个文件包含
    abc
    两次或两次以上的情况:

    find . -name '*.txt' -print0 | xargs -0 grep -o -i abc | wc -l
    
    find . -name '*.txt' -print0 | xargs -0 grep -l -i abc | wc -l
    
  • grep(1)
    手册页:

    -l,--具有匹配项的文件
    抑制正常输出;而是打印每个人的名字
    输出通常来自的输入文件
    印刷的。扫描将在第一次匹配时停止。
    (-l由POSIX指定。)
    

    -o,--仅匹配
    仅打印匹配项的匹配(非空)部分
    线,每个这样的部分在一个单独的输出线上。
    
    我完全忘记了同一行的ABC。若要进一步缩短脚本,请在grep中使用-c(count)标志,而不是管道到wc@ReubenL.,如果
    xargs(1)
    的输入对于
    grep(1)
    的单个执行来说太长,则可能会输出几个计数——是的,稍微快一点,而且在许多情况下都要短得多、简单得多:)但是小文件堆往往会变成大文件堆…@sarnold,谢谢你的回答。我会尽力回去的you@sarnold,当我尝试第一个时,收到此错误消息。$找到-名称'*.txt'-print0 | xargs-0 grep-o-i abc | wc-l find:bad option-print0 find:[-H |-l]路径列表谓词列表xargs:invalique option--0 xargs:用法:xargs:[-t][-e[eofstr e][-e eofstr i replstr i[replstr][i[replstr][i[replstr][-l][-l[-l[-n][-n][-x][-s][-s size];用于查找(1)的
    -print0
    选项和用于
    xargs(1)
    -0
    选项为文件名提供了非常安全的解释。但是,如果您的平台没有这些选项,并且您可以合理地确定没有任何文件名包含换行符,那么您可以使用
    -print
    查找(1)
    ,并取消
    -0
    xargs(1)
    。如果文件名确实有嵌入的换行符,它可能会对不相关的文件运行匹配。(在这种情况下很烦人。如果是
    rm-rf
    或其他修改,可能会产生灾难性的后果。)