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
命令来获取
您需要使用更多
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
或其他修改,可能会产生灾难性的后果。)